Ste*_*ers 5 c# wcf web-services
我正在开发这里推荐的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;
}
Run Code Online (Sandbox Code Playgroud)
使用时[DataContract]
,只有标记[DataMember]
的成员被序列化 - 因此应忽略该事件.这曾经是做WCF数据合同的唯一方法,但是MS调整它来推断来自字段的合同...... IMO的一个错误,因为它导致了你刚才遇到的问题......