我写一个Web应用程序的它使用SignalR。 在服务器C#中,我有两个集线器。 它确实需要有两个否则我也只是把它们合并并解决问题。
那我遇到的问题是,虽然我知道,SignalR客户端,中心将共享一个连接。 我遇到的问题是,当我关闭浏览器,或拨打停止在客户端上。 只有1我的服务器端OnDisconnect(布尔stopCalled)的事件将触发。
我莫名其妙地预计,当客户端断开这将开火。
我是不是傻了还是做错了什么吧? 任何信息将不胜感激。
路易
我写一个Web应用程序的它使用SignalR。 在服务器C#中,我有两个集线器。 它确实需要有两个否则我也只是把它们合并并解决问题。
那我遇到的问题是,虽然我知道,SignalR客户端,中心将共享一个连接。 我遇到的问题是,当我关闭浏览器,或拨打停止在客户端上。 只有1我的服务器端OnDisconnect(布尔stopCalled)的事件将触发。
我莫名其妙地预计,当客户端断开这将开火。
我是不是傻了还是做错了什么吧? 任何信息将不胜感激。
路易
我想你所遇到的问题可能是由于您没有挂接任何事件处理程序(即客户中心方法),以未触发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
。
最终,经过近2天烦恼拍摄和浏览网页寻找答案。 我最终只是两个中心合并成一个单一的枢纽。 它可能不是最完美的解决方案,但它确实把工作做好和进步,现在可以在应用程序的其余部分做。
感谢大家从不过建议:)
路易