我创建了一个返回IEnumerable<CyberResourceProvisioningAction>
的WCF服务。
CyberResourceProvisioningAction类型具有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; }
}
CyberResourceProvisioningActionAccountInfo
[DataContract]
public class CyberResourceProvisioningActionAccountInfo
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Value { get; set; }
}
如果需要其他配置信息,请通知我,我将编辑帖子。
答案 0 :(得分:14)
由于alexdej留下了关于“DataContract编程模型违规”的评论,我开始仔细研究我的属性中的内容。我在属性中有一个Linq类型,虽然它是一个IEnumerable,但它没有被枚举为序列化。添加了.ToList()
,一切都很顺利。