WCF-“底层连接已关闭:连接意外关闭”

5

在使用我的WCF webservice上的一个webmethod时,我遇到了一个非常模糊的错误信息。由于该错误消息没有任何解释,让我来发表一下我的看法。

我认为这可能与我正在使用的返回类型有关。

我有一个Types DLL,它被webservice和客户端引用。在这个DLL中有一个基类ExceptionMessages,还有一个名为DrawingExcepions的子类。

以下是一些代码:

public class ExceptionMessages
{
    public object[] ReturnValue { get; set; }
}

public class DrawingExceptions : ExceptionMessages
{
    private List<DrawingException> des = new List<DrawingException>();
}

public class DrawingException
{
    public Exception ExceptionMsg { get; set; }
    public List<object> Errors { get; set; }
}

使用代码:
    [OperationContract]
    ExceptionMessages createNewBom(Bom bom, DrawingFiles dfs);

    public ExceptionMessages createNewBOM(Bom bom, DrawingFiles dfs)
    {
            return insertAssembly(bom, dfs);
    }

    public DrawingExceptions insertAssembly(Bom bom, DrawingFiles dfs)
    {
        DrawingExceptions des = new DrawingExceptions();

        foreach (DrawingFile d in dfs.drawingFiles)
        {
            DrawingException temp = insertNewDrawing(bom, d);
            if (temp != null)
                des.addDrawingException(temp);

            if (d.Child != null)
                des.addDrawingException(insertAssembly(bom, d.Child));
        }

        return des;
    }

返回到:

    ExceptionMessages ems = client.createNewBom(bom, currentDFS);

    if (ems is DrawingExceptions) { }

基本上,WebMethod 的返回类型是 ExceptionMessages,但我通常会发送子类的返回值。

我的唯一想法是子类可能会导致错误,但就我所知,这不应该产生影响。有没有人知道这里可能出了什么问题?

如果需要更多信息,请随时提问 :)

谢谢。

4个回答

5

是的,这条消息很好 :)

我经常发现启用跟踪非常有帮助,就像这篇文章所描述的那样。请查看“推荐的部署或调试设置”一节。


3

当返回大量数据时,我遇到了这个错误,原来是DataContractSerialiser在流中间停止了,因为它已经达到了默认的maxItemsInObjectGraph设置。将以下内容添加到我的端点行为中,问题得到了解决。

<dataContractSerializer maxItemsInObjectGraph="2147483647" />

3
我曾经遇到同样的问题,并在这篇文章中寻找了可能解决我的 WCF 服务超时错误的可能方法。在我的情况下,squig 的答案提供了一个关于潜在条件的线索。虽然增加最大负载大小很容易,但显然会带来性能影响。
在我上传要保存的对象图并返回更新后的对象以便我可以跟踪外键等信息的情况下,我的问题是它在返回时如何变得更大了。我四处查找,发现扩展负载大小的根本原因是当我向对象图添加子对象时,这些子对象的导航属性添加了对父对象的引用,而父对象又引用了子对象,依此类推。
我进入 edmx 文件,从有问题的子对象中移除了导航属性,然后我的数据包大小就得到了控制。
希望这对其他人有所帮助!

这是我在200个声望中读过的最有帮助的答案。 - Qqbt

0

我刚遇到了同样的问题,但是上面的答案都没有解决这个问题。

我正在返回一个LINQ对象列表,数据库中所有关系都设置正确,这会导致对象自动与LINQ链接... 这正阻止了查询的工作。

我通过从LINQ DBML中删除关系来解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接