套接字连接已中止。可能的SerializationException?

时间:2010-06-25 17:21:49

标签: c# wcf entity-framework

尝试从WCF服务返回数据时,我收到此错误消息。

  

“套接字连接已中止。这可能是由于处理消息时出错或远程主机超出接收超时或基础网络资源问题引起的。本地套接字超时为'00:00:59.9960000'”

这是误导,因为它显示~59秒,但发生的异常大约是2秒。我最后一次收到此错误消息时,它与序列化实体框架对象引起的无限循环有关。幸运的是,我刚刚进行了更改,因此很容易发现。

这次我不知道是什么改变了导致这一点。我对实体框架类进行了分析,发现没有任何变化。据我所知,数据库也保持不变,虽然我不知道如何证明,因为它相当大。

如果我使用调试器逐步执行WCF代码,我发现它正确地收集数据。它甚至试图返回信息。但是,在客户端代理中,我在这行代码中收到了异常:

return Channel.GetDocuments( user, criterion );

是否有人有任何见解或工具可以帮助我追踪此异常?

2 个答案:

答案 0 :(得分:1)

我发现了问题。它与从数据库中删除的列有关,并且实体框架模型未更新。这不是我之前想过的循环循环。

这是让我指向正确方向的伎俩。

客户端代理

public List<ImageData> GetDocuments( User user, DocumentSearchCriterion criterion )
{
    Channel.GetDocuments( user, criterion );
}

WCF边服务

public List<ImageData> GetDocuments( User user, DocumentSearchCriterion criterion )
{
    List<ImageData> documents = new DocumentRepository().GetDocuments( user, criterion );

    // Temporary test to see if we can serialize the data. This is only for debugging
    // purposes and needs to be removed from production code.
    DataContractSerializer serializer = new DataContractSerializer( documents.GetType() );
    using( FileStream stream = new FileStream( "SerializerOutput.xml", FileMode.Create ) )
    {
        // This line will give an exception with useful details while debugging.
        serializer.WriteObject( stream, documents );
    }

    return documents;
}

希望通过这种通用和误导性的例外帮助其他人。

答案 1 :(得分:0)

检查以下内容:

  1. 您有大量数据,因此需要延长.config文件中的超时时间
  2. 根据我的经验,最有可能的是你从WCF函数返回的类型中有一个循环引用。
  3. 所以,如果你有一个类似这样的课程,WCF就会不高兴

    [DataContract]
    public class MyClass
    {
        public ChildObject(int i)
        {
        }
    
        [DataMember]
        public MyClass Parent
        {
            get;
            set;
        }
    }