1

我有一个要通过 WCF 服务(Net TCP 绑定)发送的 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]属性,则数据被正确传输。当然,没有物品。BindingList/**/

只要我添加[DataMember],对返回类型对象的服务方法的调用ContainerClass就会失败,并显示以下错误消息:

服务器没有提供有意义的回复;这可能是由于合同不匹配、会话过早关闭或内部服务器错误造成的。

合同错配在设计上是不可能的。可能有一个内部服务器错误,我没有收到通知。

我该如何解决这个问题并使服务器将项目发送给客户端?

4

1 回答 1

1

很可能BindingList<>无法序列化。要获得更详细的错误,您需要启用跟踪。请参阅这篇文章了解如何操作。

在 DTO 中使用复杂的集合类通常不是一个好主意。考虑使用数组/列表,您总是可以BindingList<>在客户端重建。

于 2012-10-17T23:55:16.260 回答