【问题标题】:The underlying connection was closed: The connection was closed unexpectedly底层连接已关闭:连接意外关闭
【发布时间】:2010-11-19 22:35:52
【问题描述】:

我有我的 wcf 服务,它运行良好。 然后我试图从我的 asp.net 应用程序连接到该服务。一切正常,服务中收到来自asp.net的请求(因为我可以调试代码),然后当它返回客户端时出现以下错误:

The underlying connection was closed: The connection was closed unexpectedly

我的WCF服务合同如下:

[OperationContract()]
WCFResponseGetAllProducts GetAllProducts(WCFRequestGetAllProducts request);

而 WCFResponseGetAllProducts 、 WCFRequestGetAllProducts 类具有 [DataContract] 属性。这些类的成员具有 [DataMember] 属性。

但是,当我在合同中添加另一种方法时:

[OperationContract()]
int Test();

然后我可以毫无问题地从 asp.net mvc 应用程序执行它。有人可以帮帮我吗? PS。我目前在 Visual Studio 2010 的默认 Web 服务器中托管我的 wcf 服务

【问题讨论】:

    标签: asp.net-mvc wcf


    【解决方案1】:

    我看到您已经解决了您的问题,但我仍然可以提供建议,让您看看使用 Service Trace Viewer 找出在此类情况下出了什么问题。

    【讨论】:

      【解决方案2】:

      返回的WCFResponseGetAllProducts 有多大?由于方法返回的数据量很大,我之前遇到过问题。

      通过查找属性maxArrayLengthmaxBytesPerReadmaxDepthmaxNameTableCharCountmaxStringContentLength 并增加它们,尝试为您的服务调整web.config 文件。

      您还需要对您的 asp.net 应用程序的 web.config 文件的 configuration > system.serviceModel > bindings > wsHttpBinding 部分中的属性以及(可能)maxBufferPoolSizemaxReceivedMessageSize 值执行相同的操作。

      【讨论】:

      • 抱歉,对于哪些值(具体而言,您需要更改哪些值)的答案有点含糊不清——这里已经很晚了,我可能已经喝了一两杯酒 =)
      【解决方案3】:

      我解决了这个问题。 在我的 WCFREsponseGetAllProducts 类型的响应对象中,我具有以下属性

      [DataMember]
      public IQueryable<Product> Products {get;private set;}
      

      问题在于 IQueryable 不可序列化。我已将其更改为 Collection,现在它可以工作了。

      【讨论】: