2010-05-21 166 views
5

在我的WCF Web服务上使用我的webmethods之一时,我收到了这个模糊不清的错误消息。因为这个错误信息没有提供任何解释让我发表我的理论。WCF-“底层连接已关闭:连接意外关闭”

我认为它可能有一些做的返回类型我使用

我这是在Web服务端和客户端refrenced一个类型DLL。在这个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

是的,这个消息是伟大的:)

我经常发现它有助于启用跟踪,如this article描述。查看“部署或调试的推荐设置”部分。

2

我在返回一个大的有效负载时出现这个错误,结果证明DataContractSerialiser停止了中间流,因为它已经达到了默认的maxItemsInObjectGraph设置,将以下事件添加到我的端点行为可以解决问题。

<dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
2

我有同样的问题,我作为一个可能的解决方案来到我的WCF服务有超时错误。在我的情况下,斯奎格的回答提供了关于潜在状况的线索。虽然容易提高最大有效载荷的大小,但显然这是一个具有性能影响的选项。

就我而言,我上传的对象图保存,然后将更新的对象返回到我的客户,所以我可以跟踪外键等。对于我的问题的问题是怎么会已经变得如此回程更大。我挖了一遍,它让我感到,扩展的有效载荷大小的根本原因是,当我将一个子对象添加到我的对象图中时,这些子对象的导航属性添加了对父对象的引用,如此等等。

我去了我的edmx文件,从违规的子对象中删除了导航属性,我的包大小被驯服了。

希望这可以帮助别人!

+0

这是我在200声望中读到的最有用答案。 – Qqbt 2013-07-10 20:14:01

0

我刚刚有同样的问题,但没有上述答案解决了这个问题。

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

我通过从LINQ DBML中删除关系来解决此问题

相关问题