Signalr服务器端,仅OnDisconnect要求1轮毂(Signalr server side

2019-10-29 01:25发布

我写一个Web应用程序的它使用SignalR。 在服务器C#中,我有两个集线器。 它确实需要有两个否则我也只是把它们合并并解决问题。

那我遇到的问题是,虽然我知道,SignalR客户端,中心将共享一个连接。 我遇到的问题是,当我关闭浏览器,或拨打停止在客户端上。 只有1我的服务器端OnDisconnect(布尔stopCalled)的事件将触发。

我莫名其妙地预计,当客户端断开这将开火。

我是不是傻了还是做错了什么吧? 任何信息将不胜感激。

路易

Answer 1:

我想你所遇到的问题可能是由于您没有挂接任何事件处理程序(即客户中心方法),以未触发OnDisconnected集线器。 如果这真的是原因,OnConnected也不应在同一集线器触发。

对于JavaScript客户端的SignalR集线器API指南进入一些细节在其“说明”为什么是这样的。 以下是相关报价:

注:通常你调用start方法来建立连接之前注册事件处理。 如果你想建立连接后,注册一些事件处理程序,你可以做到这一点,但你必须调用start方法之前注册事件处理程序(一个或多个)中的至少一个。 原因之一是,有可能在一个应用中有许多集线器,但你不想触发OnConnected事件上的每个轮毂,如果你只打算使用其中之一。 当连接建立后,客户端的方法在集线器的代理的存在就是告诉SignalR触发OnConnected事件。 如果你不调用start方法之前注册任何事件处理程序,你将能够调用在集线器的方法,但是轮毂的OnConnected方法不会被调用,并没有客户端的方法将会从服务器被调用。

到OnConnected方法每次参考同样适用于OnDisconnected方法。

你可以调用客户端上的start()方法,以确保OnConnected和OnDisconnected获得呼吁该集线器前添加任意的事件处理程序到你的集线器。 这不要紧,如果事件处理程序将永远不会被调用。 例如:

$.connection.myHub.client.thisWillNeverBeCalled = function () { };

$.connection.hub.start()//...

只要第一行是存在的,OnConnected和OnDisconnected应该被称为MyHub



Answer 2:

最终,经过近2天烦恼拍摄和浏览网页寻找答案。 我最终只是两个中心合并成一个单一的枢纽。 它可能不是最完美的解决方案,但它确实把工作做好和进步,现在可以在应用程序的其余部分做。

感谢大家从不过建议:)

路易



文章来源: Signalr server side, OnDisconnect only called for 1 hub