2017-03-16 63 views
0

我们有一个带有SignalR hub的asp.net mvc应用程序,该应用程序驻留在IIS上。我们将其命名为SignalR Service。一些内部服务可以向SignalR服务发送请求以通知外部客户关于任何事件。外部客户端看到与SignalR服务的连接状态很重要。必须尽快通知客户SignalR Service不可用,以便客户知道他们不会收到任何通知。在IIS上停止站点后,SignalR客户端不会断开连接

当我在IIS上停止SignalR服务时,问题就开始了。由于SignalR Service的进程在停止客户端的连接之后不存在丢弃。因此,客户端无法识别该站点已停止。由于网站已停止,因此内部服务无法访问,因此无法向外部客户端发送任何通知。

因此,预计所有服务的行为,但它不符合我们的业务逻辑。

当在IIS上停止时,我们可以做些什么来使SignalR服务断开连接?这个工作流程与网站上的IIS好主意呢?

+0

是否因为客户端尝试重新连接,并且只有在重新连接尝试超时后才会停止? – Pawel

+0

@Pawel不,不是。当我测试它时,我离开了客户很长一段时间,所以所有的超时都必须通过。 –

+0

我认为你需要打开客户端上的日志记录来找出为什么它没有断开连接。使用默认设置时,客户端应该注意到服务器在20秒内不活动,然后它应该尝试重新连接。如果客户端在30秒内无法重新连接,应该断开连接。 – Pawel

回答

0

请在下面找到答案,了解如何断开所有僵尸连接,当IIS停止并启动时。

注意:当您重新启动AppPool时,会触发重新连接事件。但是,当您重新启动网站时,将开始全新的应用程序循环,在这种情况下,您将使用HubPresence监视器,它将物理连接(内存对象)与存储的数据库连接进行比较。

构建用于SignalR简单性存在管理, https://patdunn.net/2015/05/05/building-a-simple-presence-manager-for-signalr/

让我知道这是否有助于或任何其他可能的解决方案,你已经确定。谢谢。

相关问题