C# WCF-装饰IEnumerable<;T>;with DataMember导致异常:基础连接已关闭:连接意外关闭

C# WCF-装饰IEnumerable<;T>;with DataMember导致异常:基础连接已关闭:连接意外关闭,c#,wcf,c#-4.0,ienumerable,datamember,C#,Wcf,C# 4.0,Ienumerable,Datamember,我创建了一个WCF服务,它返回IEnumerable CyberResourceProvisioningAction类型的属性为AccountInformationIEnumerable。当我用DataMemberAttribute装饰AccountInformation属性时,我收到异常: WCF System.Net.WebException: 基础连接已关闭:连接已关闭 连接意外关闭 很明显,这是一个非常普遍的例外,但我的Google fu指出,当返回集合中的大量对象时,最常见的问题就是这

我创建了一个WCF服务,它返回
IEnumerable

CyberResourceProvisioningAction类型的属性为AccountInformation
IEnumerable
。当我用DataMemberAttribute装饰AccountInformation属性时,我收到异常:

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

很明显,这是一个非常普遍的例外,但我的Google fu指出,当返回集合中的大量对象时,最常见的问题就是这个问题。建议的修复方法是设置
。不幸的是,这并没有解决我的问题。(没想到会这样,因为我返回了少量数据)

属性设置正确,因此我很确定我的问题与序列化配置有关。我的类是否存在导致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; }
}

如果需要额外的配置信息,请告诉我,我会编辑这篇文章。

因为我开始仔细查看我的属性中的内容,留下了关于“DataContract编程模型冲突”的评论。我在属性中有一个Linq类型,尽管它是一个IEnumerable,但没有为序列化枚举它。添加了一个
.ToList()
,一切正常。

如果启用了帮助页面,请浏览该页面以查看是否出现激活异常;否则,附加调试器并捕获异常。这听起来像是违反了DataContract编程模型。@alexdej我附加了一个调试器,但从未捕获任何异常。该异常显示在WCF测试客户端中,但不显示在我的调试器中。请尝试直接调试您的WCF主机项目,并使用从我的服务收到的
WcfTestClient
测试您的servicecall,错误如下
Type“System.Data.Entity.Infrastructure.DbQuery1[MYCLASS]”无法序列化。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。如果类型是集合,请考虑用CopyDATAcNoTractAttor标记它。有关其他受支持的类型,请参阅Microsoft.NET Framework文档。
。在return语句之前添加
.ToList()
,可以解决我的问题。谢谢
[DataContract]
public class CyberResourceProvisioningActionAccountInfo
{
    [DataMember]
    public string Name { get; set; }

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