8

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

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; }
}

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

4

1 回答 1

14

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

于 2011-02-03T21:07:30.330 回答