Azure Web 应用程序:Web 套接字在 100 秒后中止

Posted

技术标签:

【中文标题】Azure Web 应用程序:Web 套接字在 100 秒后中止【英文标题】:Azure web app: Web sockets abort after 100 seconds 【发布时间】:2018-04-06 10:36:38 【问题描述】:

我正在编写一个 Web 套接字应用程序,我打算使用 Azure Web 应用程序将其托管在云上。

Web 套接字是使用一个相当标准的 Owin 中间件实现的,并且在前 100 秒内可以正常工作。在这段时间之后,websocket 似乎像发条一样进入了中止状态。

[CLIENT][06/04/2018 11:27:21] WS client connected
[CLIENT][06/04/2018 11:29:01] WS client disconnected

在 IIS Express 实例上尝试此操作会出现相同的问题,尽管延迟似乎是 90 秒而不是 100 秒(这也是一致的)。

将相同的 websocket 作为 Owin 自托管应用程序的一部分运行会产生超过 25 分钟的稳定性 - 所以这似乎肯定是由托管服务器引起的问题。

在 azure web 应用程序托管上,我启用了 web 套接字,并尝试启用“始终开启”功能,希望通过防止服务器进入待机状态来防止问题 - 但这并没有帮助。

是否有任何我不知道的 azure 设置可以进行调整,以使这些 Web 套接字可以保持打开更长的时间?

非常感谢

【问题讨论】:

【参考方案1】:

不幸的是,azure 和 IIS 似乎都是红鲱鱼,而是使用 System.Net.Websockets.ClientWebSocket 的 C# 实现时遇到的问题。细节精彩总结于:.NET WebSockets forcibly closed despite keep-alive and activity on the connection

对于遇到此问题的其他人,一个有效(但不理想)的解决方法是在创建客户端 Web 套接字之前运行以下一次:

ServicePointManager.MaxServicePointIdleTime = int.MaxValue;

【讨论】:

以上是关于Azure Web 应用程序:Web 套接字在 100 秒后中止的主要内容,如果未能解决你的问题,请参考以下文章

如何在 azure 中设置安全的 Web 套接字

Azure 移动服务与将设备作为服务器的 Web 套接字

Azure 移动服务与将设备作为服务器的 Web 套接字

Azure Web App Socket Number 有啥限制?

Azure 上 ASP.NET 中 Web 套接字静态列表的不同实例

由于发生套接字错误(10054)而重试同步-Azure [关闭]