WCF - 使用DataMember解析IEnumerable <t>会导致异常:底层连接已关闭:连接意外关闭</t>

时间:2011-02-03 20:39:01

标签: c# wcf c#-4.0 ienumerable datamember

我创建了一个返回IEnumerable<CyberResourceProvisioningAction>的WCF服务。

Cyber​​ResourceProvisioningAction类型具有AccountInformation IEnumerable<CyberResourceProvisioningActionAccountInfo>属性。当我使用DataMemberAttribute修饰AccountInformation属性时,我收到异常:

  

WCF System.Net.WebException:The   基础连接已关闭:   连接意外关闭

显然是一个非常通用的例外,但我的Google-fu表明在集合中返回大量对象时最常出现此问题。建议的修复方法是设置<dataContractSerializer maxItemsInObjectGraph="2147483646"/>。不幸的是,这并没有解决我的问题。 (不要以为我会返回少量数据)。

属性设置正确,所以我很确定我的问题与我的序列化配置有关。我的类有什么问题导致WCF服务以这种方式出错吗?

[DataContract]
public class CyberResourceProvisioningAction
{
    [DataMember]
    public string Action { get; set; }

    [DataMember]
    public DateTime RcdChgDateTime { get; set; }

    [DataMember]
    public string CyberResourceName { get; set; }

    [DataMember]
    public IEnumerable<CyberResourceProvisioningActionAccountInfo> AccountInformation
    { get; set; }
}

Cyber​​ResourceProvisioningActionAccountInfo

[DataContract]
public class CyberResourceProvisioningActionAccountInfo
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Value { get; set; }
}

如果需要其他配置信息,请通知我,我将编辑帖子。

1 个答案:

答案 0 :(得分:14)

由于alexdej留下了关于“DataContract编程模型违规”的评论,我开始仔细研究我的属性中的内容。我在属性中有一个Linq类型,虽然它是一个IEnumerable,但它没有被枚举为序列化。添加了.ToList(),一切都很顺利。