【问题标题】:WCF call fails because underlying connection was closedWCF 调用失败,因为基础连接已关闭
【发布时间】:2009-11-27 08:45:24
【问题描述】:

我正在调用 WCF 服务,但在接收来自服务的响应时,我在客户端收到了 CommunicationException

System.ServiceModel.CommunicationException:接收到http://localhost:8080/Service 的 HTTP 响应时出错。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志。 ---> System.Net.WebException:底层连接已关闭:接收时发生意外错误。 ---> System.IO.IOException: Unable to read data from the transport connection: 一个现有的连接被远程主机强行关闭。 ---> System.Net.Sockets.SocketException: 现有连接被远程主机强行关闭

  • 进行调用的客户端是 WCF 代理客户端。
  • 服务方法执行时没有 任何例外。
  • WCF 调用在它不能正常工作的情况下工作正常 需要很长时间的服务 完成方法。
  • 当服务方法需要很长时间才能完成时,WCF 调用失败并显示上述异常消息。

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

【问题讨论】:

  • 您使用什么客户端拨打电话失败?

标签: wcf


【解决方案1】:

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

【讨论】:

  • 我已经更改了那些超时属性,但仍然有同样的问题。我在合同中使用了 [OperationContract(IsOneWay = true)]。你认为超时是一个问题吗?我的其他服务操作运行良好,但仅此一项不起作用。你有什么线索吗?
【解决方案2】:

这样一个很长的操作很可能应该被异步调用——换句话说,客户端要求服务器准备数据,然后在服务器完成工作时继续执行其他操作。当服务器完成时,它会回调客户端。

讨论了异步 WCF 操作here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多