繁体   English   中英

WCF + EF 4.1渴望加载和序列化问题

[英]WCF + EF 4.1 Eager Loading and Serialization Problem

我的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

通信对象System.ServiceModel.Channels.ServiceChannel由于处于故障状态,因此无法用于通信。

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

这将是循环引用陷阱( 是有关此主题的内容),而CommunicationObjectFaultedException原因将类似于以下内容:

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

其原因是,未处理的异常故障的通道和using试图调用Close对故障通道-它是在通道状态机(和一个大的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();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM