【问题标题】:SoapHttpClientProtocol: A blocking operation was interrupted by a call to WSACancelBlockingCallSoapHttpClientProtocol:阻塞操作被 WSACancelBlockingCall 调用中断
【发布时间】:2018-03-02 18:31:46
【问题描述】:

我使用 SoapHttpClientProtocol 向 Web 服务发送请求。有时我得到 SocketException:'阻塞操作被 WSACancelBlockingCall 调用中断'。 我看到以下调用堆栈:

System.IO.IOException: Unable to read data from the transport connection: A 
blocking operation was interrupted by a call to WSACancelBlockingCall. ---> 
System.Net.Sockets.SocketException: A blocking operation was interrupted by a call to WSACancelBlockingCall
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)

...

System.Net.WebException: The operation has timed out
at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
at System.Net.HttpWebRequest.GetRequestStream()
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)

我只打电话给SoapHttpClientProtocol.Invoke,没有别的。 如果机器带有代理和防火墙,我会遇到这个问题。我想这可能是原因,但我不明白如何以及如何解决它。

【问题讨论】:

  • 您多久收到一次问题?立即重试总是有效吗?我怀疑有超时问题,但不确定。
  • 一天会发生几次。问题是它发生在具有防火墙和代理的机器上。在其他类型的机器上它工作正常。
  • 服务器和客户端在同一台机器上吗?您的网络有组策略吗?当您使用组策略时,必须在密码服务器上确认连接。有时密码服务器的确认时间过长或超时。故障时间是随机的还是一致的?这可能是硬件问题,因此可能运行一些长时间的 ping 以验证运行状况可能会有所帮助。如果没有其他工作,您可以将代码放入循环中,并在失败时重试。我真的不喜欢提出这个建议。

标签: c# socketexception


【解决方案1】:

尝试使用增加超时时间

System.Web.Services.Protocols.SoapHttpClientProtocol.Timeout

在您拨打电话之前。

如果这不起作用,那么您可能需要查看防火墙设置,假设它永远不会通过防火墙。

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 2021-02-03
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2013-11-16
    • 2014-11-18
    相关资源
    最近更新 更多