gpt4 book ai didi

c# - WCF + EF 4.1 预加载和序列化问题

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:50 25 4
gpt4 key购买 nike

我的 OperationContract 实现的简单情况如下:

public List<Directory> GetDirectories(bool includeFiles)
{
if (includeFiles)
{
return this.db.Directories.Include(e => e.Files).ToList();
}
else
{
return this.db.Directories.ToList();
}
}

GetDirectories(false); 工作正常,GetDirectories(true); 抛出 CommunicationObjectFaultedException 消息:

The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.

显然我的 File 实体引用了 Directory 实体,而 Directory 实体有一个文件列表。首先,我认为这将是典型的循环引用陷阱,但我在异常消息中没有看到它的迹象。关于这个问题有什么想法吗?

最佳答案

这将是循环引用陷阱(here 与此主题有关)并且您的 CommunicationObjectFaultedException 的原因如下:

using (var client = new ServiceClient())
{
data = client.GetDirectories(true);
}

原因是未处理的异常使 channel 出现故障,正在使用 试图在该故障 channel 上调用Close - 它是 channel 状态机中的无效转换(和一个大 WCF 陌生感)导致你提到的异常。有很多方法可以避免它,但基础是:

ServiceClient client = null;

try
{
client = new ServiceClient();
data = client.GetDirectories(true);
}
finally
{
if (client != null)
{
if (client.State == CommunicationState.Faulted)
{
client.Abort();
}
else
{
client.Close();
}
}
}

关于c# - WCF + EF 4.1 预加载和序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7566466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com