我有一个CLR类,我想通过WCF服务(Net绑定)发送它.客户端和服务器都使用相同的数据类和服务接口。没有生成存根。以下是两个类的基本部分:
[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])
}如果省略了BindingList的BindingList属性(标记为/**/),则数据将正确传输。当然,在没有物品的时候。
一旦我添加了[DataMember],对服务方法的调用(该方法返回一个类型为ContainerClass的对象)就会失败,并出现以下错误消息:
服务器没有提供有意义的答复;这可能是由于契约不匹配、过早的会话关闭或内部服务器错误造成的。
合同不匹配是不可能的。可能有一个内部服务器错误,但没有通知我。
如何解决这个问题并让服务器将项目发送到客户端?
发布于 2012-10-17 23:55:16
很可能BindingList<>无法序列化。要获得更详细的错误,需要启用跟踪。关于如何做到这一点,请参见this post。
在DTO中使用复杂的集合类通常不是一个好主意。考虑数组/列表,您可以始终在客户端重构BindingList<>。
https://stackoverflow.com/questions/12945108
复制相似问题