IIS停止后,信号器不会断开连接

时间:2017-04-18 10:20:24

标签: c# asp.net iis signalr

我有一个应用程序,其中有一个服务器和多个客户端通过signalr连接。该服务器是一个托管在Win 2012R2,IIS 8.5中的asp.net应用程序。最近我发现了一个问题,当我从IIS管理器实际停止该站点时,客户端不会被解除连接。它一直向服务器发送keepalive ping,尽管我已经从IIS停止了它。但是当我回收应用程序池时,连接会触发断开连接。这是信号器的正常行为,还是当服务器被IIS停止时它应该从客户端断开?

SignalR版本 - 2.2.1

1 个答案:

答案 0 :(得分:2)

我认为停止网站不是一个优雅的"因此,SignalR客户端不会得到通知,因此它们会不断向服务器发送保持活动消息。这与应用程序池回收相反,后者允许进程正常结束(关闭期)。

检查this article以了解如何实施克服此问题的机制:

随着SignalR应用程序的增长,您将发现自己希望以更复杂的方式处理状态管理。默认情况下 SignalR自己的状态管理在内存中。因此,如果您的服务器重新启动或您在Web场环境中运行,则无法正确维护您的连接

  

良好的状态管理系统是什么?

     

[...] 删除僵尸连接。您需要确保挂钩   所有断开连接事件,以便更新您的用户连接   数据库。