Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF异步调用返回10054错误:“0”;现有连接被远程主机强制关闭;_C#_Wcf_Windows Mobile - Fatal编程技术网

C# WCF异步调用返回10054错误:“0”;现有连接被远程主机强制关闭;

C# WCF异步调用返回10054错误:“0”;现有连接被远程主机强制关闭;,c#,wcf,windows-mobile,C#,Wcf,Windows Mobile,我有一个WCF被Windows Mobile 5.0或更高版本的.NET Compact Framework 2.0 SP2和C#应用程序使用 当应用程序使用异步“方法”时,它抛出该消息。这也是内部异常的堆栈跟踪: at System.Net.Sockets.Socket.ReceiveNoCheck() at System.Net.Sockets.Socket.Receive() at System.Net.Connection.Read() at System.Net.HttpWebRequ

我有一个WCF被Windows Mobile 5.0或更高版本的.NET Compact Framework 2.0 SP2C#应用程序使用

当应用程序使用异步“方法”时,它抛出该消息。这也是内部异常的堆栈跟踪:

at System.Net.Sockets.Socket.ReceiveNoCheck()
at System.Net.Sockets.Socket.Receive()
at System.Net.Connection.Read()
at System.Net.HttpWebRequest.fillBuffer()
at System.Net.HttpWebRequest.getLine()
at System.Net.HttpWebRequest.parseResponse()
at System.Net.HttpWebRequest.startReceiving()
at System.Net.Connection.startReceiving()
at WorkItem.doWork()
at System.Threading.Timer.ring()
来自异常的消息是:

“无法从传输连接读取数据。”

其堆栈跟踪是:

at System.Net.HttpWebRequest.finishGetResponse()
at System.Net.HttpWebRequest.GetResponse()
at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse()
at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse()
at System.Web.Services.Protocols.SoapHttpClientProtocol.doInvoke()
at System.Web.Services.Protocols.SoapHttpClientProtocol.doAsyncInvoke()
at WorkItem.doWork()
at System.Threading.Timer.ring()
发生了什么事

如果你需要更多的细节告诉我

更新

我有两台计算机,在这两台计算机上都会发生相同的错误。其中一个是Windows 7 Ultimate 64位,另一个是Windows Vista Home Premium 32位。也许这与代码有关


谢谢。

对于此类套接字异常,我们通常需要使用Wireshark或Microsoft network Monitor捕获网络流量以进行故障排除。只有当这些信息可用时,我们才能知道在有线(或无线)网络上发生了什么。

我看到,当两次调用之间的间隔超过HTTP保持活动超时和/或一些中间NAT会话超时时,就会发生这种情况。服务器或中间件会关闭连接,客户端在尝试重新使用连接之前不会注意到。在这种情况下重试是合适的。

有一个对我有用的答案,使用了三个部分:

  • 禁用保留

    webRequest.KeepAlive=false

  • 将ProtocolVersion设置为Version10

    webRequest.ProtocolVersion=HttpVersion.Version10

  • 限制服务点的数量(在调用GetResponse()之前,ServicePoint为null)

    webRequest.ServicePoint.ConnectionLimit=1


  • 你需要这些信息吗?是否向您显示该信息?抱歉,否。分析此类数据需要时间:)如果您不熟悉此类分析,您可以通过与Microsoft支持团队联系,我不认为这是网络问题,因为我有两台计算机,并且在这两台计算机上都会发生相同的错误。好的,我已将此项添加到注册表:“HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DWORD SynAttackProtect 00000000“而且它起作用了!但我要删除它,因为它不安全。我在这里发现它是基于你在评论中发布的链接,听起来可能是你发送连接请求的客户端发送太多太快了?您的代码是否尝试建立多个连接?如果它无法连接,您是否要重试?您正在使用保留的端口吗?您的套接字请求是否得到了处理?您的侦听器代码是什么样子的?它是循环、等待响应还是只是停止?客户呢?您是使用任何类型的控制代码来关闭连接,还是只是强制关闭连接。这是使用WCF吗?还是纯网络插座?另一个问题,因为你说它是Aysnc。它在一个非异步的直接调用中工作吗?现在,它工作了,我不做任何更改。有一个错误,我会找到它。现在,它不工作了。我不会改变任何事情。