仅当在Azure VM上运行时,SignalR SocketException

时间:2018-09-23 12:26:46

标签: signalr

我有一个使用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的一些信息

enter image description here

1 个答案:

答案 0 :(得分:0)

最后,我通过实现客户端ping来解决了这个问题。我每十秒钟在服务器中心上调用一个无效的Ping()方法,一切都很好。