【发布时间】:2014-08-17 16:56:21
【问题描述】:
我正在使用 ASP.NET MVC 4 和 SignalR 2.1.1。 我的网站适用于所有浏览器中的大多数用户,但只有特定 isp 网络上的某些用户才会出现错误。
错误是这样的:
The connection to ws://domain.com/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=78ZpJ007jmlLSBbVzDVbfpYahHsveD3x8%2Bc5PC9h%2FgeOz5zNgE8SaKWaQAasGNLe%2BvJeI6ux6IqW0E8WQWqP6Ps%2FXjc8WPbG7G47oHSxRSx7nVj0leVa1DdXzEXnLQ%2BA&connectionData=%5B%7B%22name%22%3A%22homehub%22%7D%5D&tid=4 was interrupted while the page was loading.
对于收到此错误的同一用户,使用不同的网络(而同一浏览器/计算机/手机)登录互联网可以解决问题。
到目前为止,我只看到有关此错误的问题,将问题指向浏览器,但就我而言,使用具有不同网络的同一浏览器可以解决问题。
你们中的任何人都知道如何解决这个问题吗?
更新 1: 我注意到客户端方法实际上有效,它是服务器方法不起作用。
我是什么意思?:
我有一个在线用户列表,当用户进入和退出站点时,会调用一个更新用户名列表的信号器客户端方法:
hub.client.addOnlineMember = function (member) {
var newMember = addMember(member);
memberList.append(newMember);
};
hub.client.removeOnlineMember = function (member) {
var newMemberId = '#' + member;
$(memberListName + ' ' + newMemberId).remove();
};
但是,当尝试从服务器加载消息时,它的功能不起作用:
$('#LoadMore').click(function () {
hub.server.loadTopics(page);
});
更新 2: 我添加了日志记录:
$.connection.hub.logging = true;
以下是调查结果:
The connection to ws://domain.com/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=rR8%2BSK%2BC%2FtuzPqIGKgPrUNORzBz2kP0WUmXJsURP70Zsj6RK1fOi5tUN1UGEQPntGwoEvwinMkPCXRTyliLwzfLoOBl%2BkCWoBAkAqIFYaDVk3X1MG8dQERl8Or%2F4%2Filp&connectionData=%5B%7B%22name%22%3A%22hub%22%7D%5D&tid=6 was interrupted while the page was loading. jquery.signalr-2.1.1.min.js:8
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help http://xhr.spec.whatwg.org/ jquery-2.1.1.min.js:4
"[16:21:50] SignalR: Stopping connection." jquery.signalr-2.1.1.min.js:8
"[16:21:50] SignalR: Closing the Websocket." jquery.signalr-2.1.1.min.js:8
no element found abort:1
"[16:21:50] SignalR: Fired ajax abort async = false." jquery.signalr-2.1.1.min.js:8
"[16:21:50] SignalR: Stopping the monitoring of the keep alive." jquery.signalr-2.1.1.min.js:8
"[16:21:51] SignalR: Client subscribed to hub 'hub'." jquery.signalr-2.1.1.min.js:8
"[16:21:51] SignalR: Negotiating with '/signalr/negotiate?clientProtocol=1.4&connectionData=%5B%7B%22name%22%3A%22hub%22%7D%5D'." jquery.signalr-2.1.1.min.js:8
"[16:21:51] SignalR: Connecting to websocket endpoint 'ws://domain.com/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=bkg5ksXTUdzl9GrShmLqEyUbeG9SMDBaiccbH2prQ4t1mPmoOutKqj9gvgkd9vveTnIKhK0cMHYZ8NOrS4pemaLmwOb5TmNJzGEiPAUXrknuIhxtUSqmNmL255MIFdwc&connectionData=%5B%7B%22name%22%3A%22hub%22%7D%5D&tid=2'." jquery.signalr-2.1.1.min.js:8
"[16:21:51] SignalR: Websocket opened." jquery.signalr-2.1.1.min.js:8
"[16:21:51] SignalR: webSockets transport selected. Initiating start request." jquery.signalr-2.1.1.min.js:8
"[16:21:51] SignalR: The start request succeeded. Transitioning to the connected state." jquery.signalr-2.1.1.min.js:8
"[16:21:51] SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332 and a connection lost timeout of 20000." jquery.signalr-2.1.1.min.js:8
"[16:23:05] SignalR: Triggering client hub event 'addOnlineMember' on hub 'hub'." jquery.signalr-2.1.1.min.js:8
"[16:23:25] SignalR: Triggering client hub event 'removeOnlineMember' on hub 'hub'." jquery.signalr-2.1.1.min.js:8
"[16:23:42] SignalR: Invoking hub.LoadTopics" jquery.signalr-2.1.1.min.js:8
如您所见,客户端方法效果很好。正在调用服务器方法,但没有任何反应。
在工作的 isp 网络上记录信号器:
"[17:03:40] SignalR: Invoking hub.LoadTopics" jquery.signalr-2.1.1.min.js:8
"[17:03:41] SignalR: Triggering client hub event 'addTopicToHome' on hub 'hub'." jquery.signalr-2.1.1.min.js:8
"[17:03:41] SignalR: Triggering client hub event 'incrementPage' on hub 'hub'." jquery.signalr-2.1.1.min.js:8
"[17:03:41] SignalR: Invoked hub.LoadTopics" jquery.signalr-2.1.1.min.js:8
更新 3:
将我的项目上传到 IIS 7.5 服务器后,该代码适用于所有 ISP 网络。由于 IIS 7.5 不支持 Websockets,服务器发送事件、长轮询和永久帧(取决于浏览器)等协议启动成功。 但是,我不知道 IIS 8 服务器在意识到 websockets 不起作用时没有启动工作协议的原因,这就是 signalr 所做的,不是吗?
我联系了我的托管服务提供商,他们认为问题与服务器上不受支持的 SSL 密钥有关。他们仍未解决此 SSL 问题,因此无法确定这确实是问题所在。你觉得可能是这样吗?
无论如何,仍然没有成功找到答案..请帮助。
【问题讨论】:
-
请您发布您的中心代码
-
您好,感谢您第一个尝试回答我。我的中心没有什么特别的,只是创建一个列表并将数据传递给客户端:Clients.Caller.addTopicToHome(list); Clients.Caller.incrementPage(); -- 请注意,相同的代码适用于所有其他 isp 网络。
标签: asp.net asp.net-mvc-4 signalr