我正在按照推荐的here开发一个wcf服务。它解决了我最初开发原始.NET 2.0Web服务时名称空间冲突的问题,但我遇到了另一个问题。
我试图传递给wcf服务的对象在客户端中用来聚合来自用户的一堆信息,并且它的一些字段被数据绑定到ui控件(因此实现了PropertyChangedEventHandler)。当我试图在我的客户端项目中编译由svcutil生成的代理时,我得到了标题为这个问题的错误。
从这个对象中提取所有数据并放入一个类中进行发送(然后重建原始类型)似乎是多余的-更不用说花费了非常长的时间。
有解决办法吗?
发布于 2009-06-05 19:33:57
我能检查一下吗?您是否正在将委托传递给web服务?那是行不通的。它*不能序列化。在最好的情况下,ADO.NET数据服务(.NET 3.5SP1)可以通过将Expression转换为查询字符串来执行类似的操作。但这是你能得到的最接近的结果了。除此之外,您还必须构建一个request对象,该对象用常规属性封装您的意图。
这适用于web服务、wcf服务、tcp等中的任何一个。
*=a委托本质上是一个类型安全的方法句柄(具有可选的目标(实例)引用);例如,它可以表示为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]的成员才会被序列化,因此应忽略该事件。这曾经是做数据合同的唯一方式,但微软调整它,以推断合同从字段...一个错误,因为它导致了你刚刚遇到的问题...
https://stackoverflow.com/questions/957474
复制相似问题