2009-11-27 174 views
1

我正在调用WCF服务,但在客户端收到服务响应时收到CommunicationException由于底层连接关闭,WCF呼叫失败

System.ServiceModel.CommunicationException:接收到对http://localhost:8080/Service的HTTP响应时发生错误。这可能是由于服务端点绑定不使用HTTP协议。这也可能是由于HTTP请求上下文被服务器中止(可能是由于服务关闭)。查看服务器日志获取更多详细信---> System.Net.WebException:底层连接已关闭:接收时发生意外错误。 ---> System.IO.IOException:无法从传输连接读取数据:现有连接被远程主机强制关闭。 ---> System.Net.Sockets.SocketException:一个现有的连接被强制由远程主机

  • ,使得该呼叫是一个WCF代理客户端,客户端关闭。
  • 该服务方法在没有 的情况下执行任何异常。
  • WCF调用在其中 花费很长时间才能完成服务的那些情况下正常工作。
  • 当服务方法花费很长时间完成时,WCF调用将失败,并显示上述异常消息。

客户端绑定的sendTimeout属性已增加到30分钟以适应服务方法完成所需的时间。

+0

你使用什么客户端来使呼叫失败? – 2009-11-27 08:54:46

回答

2

尝试设置receiveTimeout等于或大于它需要的服务方法完成的时间越大。 receiveTimeout属性的默认值为10分钟。因此,如果服务方法需要较长时间才能完成连接,则会关闭(如果在发生receiveTimeout之前没有其他活动发生)。 receiveTimeout财产被描述为here

这样
+0

我改变了这些超时属性,仍然有同样的问题。我在合同中使用了[OperationContract(IsOneWay = true)]。你相信超时是一个问题吗?我的其他服务操作很好,但只有这一个不起作用。你有什么线索吗? – 2010-07-05 03:32:15

2

很长的操作应最有可能被异步调用的 - 换句话说,客户要求服务器准备数据,然后获取与别的东西,而服务器做的工作。当服务器结束时,它会回拨客户端。

讨论异步WCF操作here

相关问题