WCF - 使用DataMember修饰IEnumerable 导致异常:底层连接已关闭:连接意外关闭
问题描述:
我创建了一个WCF服务,返回IEnumerable<CyberResourceProvisioningAction>
。WCF - 使用DataMember修饰IEnumerable <T>导致异常:底层连接已关闭:连接意外关闭
CyberResourceProvisioningAction类型具有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; }
}
CyberResourceProvisioningActionAccountInfo
[DataContract]
public class CyberResourceProvisioningActionAccountInfo
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Value { get; set; }
}
如果需要额外的配置信息,让我知道,我将修改后。
答
由于alexdej左边留下的关于“DataContract编程模型违规”的评论,我开始更加关注我的属性。我在属性中有一个Linq类型,虽然它是一个IEnumerable,但它并没有被列举为序列化。增加了一个.ToList()
,一切都很好。
如果您启用了帮助页面,请浏览该页面以查看是否收到激活例外;否则附加一个调试器并捕获异常。这听起来可能是DataContract编程模型违规。 – alexdej 2011-02-03 20:44:29
@alexdej我附加了一个调试器,但从不捕获任何异常。 WCF Test Client中出现异常,但不是我的调试器。 – ahsteele 2011-02-03 21:02:55