Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Signalr 信号服务器端,仅为1集线器调用OnDisconnect_Signalr_Signalr Hub - Fatal编程技术网

Signalr 信号服务器端,仅为1集线器调用OnDisconnect

Signalr 信号服务器端,仅为1集线器调用OnDisconnect,signalr,signalr-hub,Signalr,Signalr Hub,我正在编写一个web应用程序,它使用信号器。在服务器c#上,我有两个集线器。 它确实需要是两个,否则我会合并它们并解决问题 我遇到的问题是,虽然我知道signer客户端 将共享一个连接。我遇到的问题是,当我关闭浏览器或在客户端上调用stop时。只有1个服务器端OnDisconnect(bool stopCalled)事件将触发 我不知怎的预料到,当客户端断开连接时,两者都会触发 我是不是很傻或者做错了什么? 任何信息都将不胜感激 Louis我认为您遇到的问题可能是由于您没有将任何事件处理程序(即

我正在编写一个web应用程序,它使用信号器。在服务器c#上,我有两个集线器。 它确实需要是两个,否则我会合并它们并解决问题

我遇到的问题是,虽然我知道signer客户端 将共享一个连接。我遇到的问题是,当我关闭浏览器或在客户端上调用stop时。只有1个服务器端OnDisconnect(bool stopCalled)事件将触发

我不知怎的预料到,当客户端断开连接时,两者都会触发

我是不是很傻或者做错了什么? 任何信息都将不胜感激


Louis

我认为您遇到的问题可能是由于您没有将任何事件处理程序(即客户端集线器方法)连接到未触发OnDisconnected的集线器。如果这真的是原因,OnConnect也不应该在同一个集线器上触发

在其中一个“注释”中详细介绍了为什么会出现这种情况。以下是相关报价:

注意:通常在调用start方法建立连接之前注册事件处理程序。如果要在建立连接后注册某些事件处理程序,可以这样做,但必须在调用start方法之前注册至少一个事件处理程序。这样做的一个原因是,一个应用程序中可能有许多集线器,但如果您只想使用其中一个集线器,则不希望在每个集线器上触发OnConnect事件。当建立连接时,集线器代理上的客户端方法的存在会告诉SignalR触发OnConnected事件。如果在调用start方法之前未注册任何事件处理程序,则可以调用Hub上的方法,但不会调用Hub的OnConnected方法,也不会从服务器调用任何客户端方法

对OnConnected方法的每个引用都同样适用于OnDisconnected方法

在客户端上调用start()之前,可以向中心添加任意事件处理程序,以确保在该中心上调用OnConnected和OnDisconnected。事件处理程序是否永远不会被调用并不重要。例:

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

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

只要有第一行,就应该在
MyHub
上调用OnConnected和OnDisconnected。我认为您遇到的问题可能是由于您没有将任何事件处理程序(即客户端hub方法)连接到未触发OnDisconnected的hub。如果这真的是原因,OnConnect也不应该在同一个集线器上触发

在其中一个“注释”中详细介绍了为什么会出现这种情况。以下是相关报价:

注意:通常在调用start方法建立连接之前注册事件处理程序。如果要在建立连接后注册某些事件处理程序,可以这样做,但必须在调用start方法之前注册至少一个事件处理程序。这样做的一个原因是,一个应用程序中可能有许多集线器,但如果您只想使用其中一个集线器,则不希望在每个集线器上触发OnConnect事件。当建立连接时,集线器代理上的客户端方法的存在会告诉SignalR触发OnConnected事件。如果在调用start方法之前未注册任何事件处理程序,则可以调用Hub上的方法,但不会调用Hub的OnConnected方法,也不会从服务器调用任何客户端方法

对OnConnected方法的每个引用都同样适用于OnDisconnected方法

在客户端上调用start()之前,可以向中心添加任意事件处理程序,以确保在该中心上调用OnConnected和OnDisconnected。事件处理程序是否永远不会被调用并不重要。例:

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

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

只要有第一行,就应该在
MyHub
上调用OnConnected和OnDisconnected。我认为您遇到的问题可能是由于您没有将任何事件处理程序(即客户端hub方法)连接到未触发OnDisconnected的hub。如果这真的是原因,OnConnect也不应该在同一个集线器上触发

在其中一个“注释”中详细介绍了为什么会出现这种情况。以下是相关报价:

注意:通常在调用start方法建立连接之前注册事件处理程序。如果要在建立连接后注册某些事件处理程序,可以这样做,但必须在调用start方法之前注册至少一个事件处理程序。这样做的一个原因是,一个应用程序中可能有许多集线器,但如果您只想使用其中一个集线器,则不希望在每个集线器上触发OnConnect事件。当建立连接时,集线器代理上的客户端方法的存在会告诉SignalR触发OnConnected事件。如果在调用start方法之前未注册任何事件处理程序,则可以调用Hub上的方法,但不会调用Hub的OnConnected方法,也不会从服务器调用任何客户端方法

对OnConnected方法的每个引用都同样适用于OnDisconnected方法

在客户端上调用start()之前,可以向中心添加任意事件处理程序,以确保在该中心上调用OnConnected和OnDisconnected。事件处理程序是否永远不会被调用并不重要。例:

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

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

只要有第一行,就应该在
MyHub
上调用OnConnected和OnDisconnected。我认为您遇到的问题可能是由于您没有将任何事件处理程序(即客户端hub方法)连接到未触发OnDisconnected的hub。如果这真的是原因,OnConnect也不应该在同一个集线器上触发

进入