我有一个使用SignalR在客户端和服务器之间进行通信的应用程序。一切最终都将在本地运行,但是当我部署到Azure虚拟机时,会定期出现以下异常:
Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets [14] 连接ID“ 0HLH19P3L3KJB”通讯错误。 System.IO.IOException:连接尝试失败,因为一段时间后连接方未正确响应,或者建立的连接失败,因为连接的主机未能响应---> System.Net.Sockets.SocketException:连接尝试由于连接的一方在一段时间后未正确响应而失败,或者由于连接的主机未能响应而建立的连接失败 在Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal.SocketAwaitable.GetResult() 在Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal.SocketConnection.ProcessReceives() 在Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal.SocketConnection.DoReceive() ---内部异常堆栈跟踪的结尾---
我已经阅读了与SignalR相关的所有与Timeout相关的内容,并且共识似乎是将默认设置保留为原样就可以了,所以我还没有尝试调整任何设置。 / p>
该异常是我应该期待并应该处理的,还是我应该从源头上解决的异常情况?在Azure VM配置中我应该寻找可能导致此问题的任何东西吗?还是应该使用SignalR本身的超时设置?
编辑一些更详细的例外:
ystem.Net.WebSockets.WebSocketException(0x80004005):远程用户在未完成关闭握手的情况下关闭了WebSocket连接。 ---> System.IO.IOException:连接尝试失败,因为一段时间后连接方未正确响应,或者建立的连接失败,因为连接的主机未能响应---> System.Net.Sockets.SocketException :连接尝试失败,因为一段时间后被连接方未正确响应,或者由于连接的主机未能响应而建立的连接失败
还有Wireshark的一些信息
答案 0 :(得分:0)
最后,我通过实现客户端ping来解决了这个问题。我每十秒钟在服务器中心上调用一个无效的Ping()方法,一切都很好。