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

Ste*_*ers 5 c# wcf web-services

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

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

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

有解决方法吗?

Mar*_*ell 6

我可以查一下吗?您是否将委托传递给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;
}
Run Code Online (Sandbox Code Playgroud)

使用时[DataContract],只有标记[DataMember]的成员被序列化 - 因此应忽略该事件.这曾经是做WCF数据合同的唯一方法,但是MS调整它来推断来自字段的合同...... IMO的一个错误,因为它导致了你刚才遇到的问题......