‘System.ComponentModel.PropertyChangedEventHandler’无法从特殊类’System.MulticastDelegate’派生

我正在开发这里推荐的wcf服务。 它在开发原始.NET 2.0 Web服务时解决了我最初的命名空间冲突问题,但我遇到了另一个问题。

我试图传递给wcf服务的对象在客户端中用于聚合来自用户的一堆信息,并且它的一些字段被数据绑定到ui控件(因此实现了PropertyChangedEventHandler)。 当我尝试在我的客户端项目中编译由svcutil生成的代理时,我得到了标题这个问题的错误。

将所有数据从这个对象中拉出并放入一个类中进行发送(然后重建原始类型)似乎是多余的 – 更不用说花费很长时间了。

有解决方法吗?

我可以查一下吗? 您是否将委托传递给Web服务? 这将无法正常工作……它*无法序列化。 最好的情况是,ADO.NET数据服务(.NET 3.5SP1)可以通过将Expression转换为查询字符串来做类似的事情……但这样做会尽可能接近。 除此之外,您还必须构建一个请求对象,该对象使用常规属性封装您的意图。

这适用于任何web服务,wcf服务,tcp等。

* =委托本质上是一个类型安全的方法句柄(带有可选的目标(实例)引用); 它可以表示为例如xml


(编辑)

从评论中 – 可能只是你没有归因于你的数据合同; 这意味着它必须推断合同(而且经常会出错)。 例如:

 [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数据合同的唯一方法,但MS调整它来推断来自字段的合同…… IMO的错误,因为它导致你刚才遇到的问题……