- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在按照建议开发 wcf 服务 here .它解决了我最初在开发原始 .NET 2.0 Web 服务时遇到的 namespace 冲突问题,但我又遇到了另一个问题。
我试图传递给 wcf 服务的对象在客户端中用于聚合来自用户的大量信息,并且它的一些字段数据绑定(bind)到 ui 控件(因此实现 PropertyChangedEventHandler)。当我尝试在我的客户端项目中编译由 svcutil 生成的代理时,我收到标题为该问题的错误。
从这个对象中提取所有数据并放入一个类中进行发送(然后重建原始类型)似乎是多余的 - 更不用说要花很长时间了。
有解决办法吗?
最佳答案
我可以检查吗?您是否将委托(delegate)传递给网络服务?那行不通……它*无法序列化。充其量,ADO.NET 数据服务 (.NET 3.5SP1) 可以通过将 Expression
转换为查询字符串来执行类似的操作...但这是您所能达到的最接近的结果。除此之外,您必须构建一个请求对象,用常规属性封装您的意图。
这适用于任何 web 服务、wcf 服务、tcp 等。
*=委托(delegate)本质上是一个类型安全的方法句柄(带有一个可选的目标(实例)引用);例如,它可以表示为 xml
(编辑)
根据评论 - 可能只是您没有归因于您的数据契约(Contract);这意味着它必须推断契约(Contract)(而且它经常会出错)。例如:
[DataContract]
class Foo : IWhateverInterfaces {
[DataMember]
public string Bar {get;set;}
[DataMember]
public int Baz {get;set;}
public float NotPartOfTheContract {get;set;}
public event EventHandler AlsoNotPartOfTheContract;
}
当使用 [DataContract]
时,只有标记为 [DataMember]
的成员被序列化 - 所以该事件应该被忽略。这曾经是执行 WCF 数据契约(Contract)的唯一方式,但 MS 对其进行了调整以从字段中推断契约(Contract)...IMO 的一个错误,因为它会导致您刚刚遇到的问题...
关于c# - 'System.ComponentModel.PropertyChangedEventHandler' 不能派生自特殊类 'System.MulticastDelegate',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/957474/
由于我们注册了两次回调函数PrintOne,下面的代码将打印消息“PrintOne”两次。这里有问题, 问题 1> 为什么默认情况下 operator+=(即 Combine)不检查重复的方法处理程序
我尝试使用从userControl到表单的事件,但是在表单构造函数中创建事件时遇到了问题。我不知道哪里失败了。有我的代码。 用户控件 public GameField() {
我有一个仅在生产环境中发生的非常奇怪的问题。异常有消息 "Delegate to an instance method cannot have null 'this'". 抛出异常的方法非常简单,并且
我正在寻找可能对此了解更多的人,我的直觉告诉我答案是“不,它不是线程安全的”,但我想确定一下。 为了说明我的问题,我提供了这个类的一些上下文 public class MyContext {
我有一个 MulticastDelegate,它可以引用具有相同签名的多个(遗留)委托(delegate)之一。例如: public delegate void ObjectCreated(objec
根据 Jon Skeet , "您只能在具有单个目标调用的委托(delegate)上调用 BeginInvoke。" 这是为什么呢?真正的原因是什么? 注意:为了澄清(并且因为我犯了这个错误),我说的
我想从我的库类中引发一系列事件,但我担心某些事件订阅者会很粗鲁并且需要很长时间来处理某些事件,从而阻塞引发事件的线程。我想我可以通过使用线程池线程来引发每个事件来保护引发线程: if (packet
C# 7.3 添加了 support用于将泛型类型参数约束为委托(delegate)类型。 public class UsingDelegate where T : System.Delegate {
调用多播委托(delegate)时,应使用 GetInvocationList 逐一调用委托(delegate): public void IterateAll() { if( _doExec
当我继承 Delegate 或 MulticastDelegate 类时出现编译器错误,尽管我无法继承这些类,但它们都是普通的抽象类。 你能告诉我为什么这些类不被视为基类吗? 最佳答案 因为 Mult
我认为答案是否定的?如果没有,为什么我们要分离 Delegate 和 MulticastDelegate 类?也许又是因为“其他一些 .NET 语言”? 最佳答案 编辑:我以为这是 ECMA 335
虽然 C# 支持 Java 中的委托(delegate)和事件,但我们必须要么使用匿名内部类进行绑定(bind),要么使用反射代码 http://oatv.com/pub/a/onjava/2003/
我在断点处在即时窗口中输入所有这些: typeof(MulticastDelegate).GetFields(BindingFlags.Instance | BindingFlags.Public |
我正在按照建议开发 wcf 服务 here .它解决了我最初在开发原始 .NET 2.0 Web 服务时遇到的 namespace 冲突问题,但我又遇到了另一个问题。 我试图传递给 wcf 服务的对象
我有一个关于委托(delegate)类型的非常基本的问题。我在对象浏览器中比较了 Delegate 和 MulticastDelegate 类的成员,但在 MulticastDelegate 中找不到
我是一名优秀的程序员,十分优秀!