2011-02-03 107 views
8

我创建了一个WCF服务,返回IEnumerable<CyberResourceProvisioningAction>WCF - 使用DataMember修饰IEnumerable <T>导致异常:底层连接已关闭:连接意外关闭

Cyber​​ResourceProvisioningAction类型具有AccountInformation IEnumerable<CyberResourceProvisioningActionAccountInfo>的属性。当我装点DataMemberAttribute的AccountInformation财产我收到异常:

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

显然是一个非常通用的异常,但是我的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; } 
} 

如果需要额外的配置信息,让我知道,我将修改后。

+2

如果您启用了帮助页面,请浏览该页面以查看是否收到激活例外;否则附加一个调试器并捕获异常。这听起来可能是DataContract编程模型违规。 – alexdej 2011-02-03 20:44:29

+0

@alexdej我附加了一个调试器,但从不捕获任何异常。 WCF Test Client中出现异常,但不是我的调试器。 – ahsteele 2011-02-03 21:02:55

回答

14

由于alexdej左边留下的关于“DataContract编程模型违规”的评论,我开始更加关注我的属性。我在属性中有一个Linq类型,虽然它是一个IEnumerable,但它并没有被列举为序列化。增加了一个.ToList(),一切都很好。

相关问题