我有一个我想通过WCF服务(Net TCP Binding)发送的CLR类。客户端和服务器都使用相同的数据类和服务接口。没有生成存根。以下是两个类的基本部分:
[DataContract]
public class ContainerClass
{
//some primitive data with [DataMember] ...
[DataMember] /**/
public virtual BindingList<ItemClass> Items{ get; private set; }
}
[DataContract]
public class ItemClass
{
//some primitive data with [DataMember] ...
public ContainerClass Parent { get; set; } // (no [DataMember])
}
如果我忽略[DataMember]
的{{1}}属性(标有BindingList
),则会正确传输数据。当然,没有项目。
只要添加/**/
,对service方法的调用就会失败,并返回类型为[DataMember]
的对象,并显示以下错误消息:
服务器未提供有意义的回复;这可能是由于合同不匹配,过早的会话关闭或内部服务器错误造成的。
合同不匹配是不可能的。可能存在内部服务器错误,我未收到通知。
如何解决此问题并让服务器将项目发送到客户端?
答案 0 :(得分:1)
很可能BindingList<>
无法序列化。要获得更详细的错误,您需要启用跟踪。请参阅this post了解如何操作。
在DTO中使用复杂的集合类通常不是一个好主意。相反,请考虑数组/列表,您始终可以在客户端重构BindingList<>
。