信号不能在特定的isp网络上工作



我正在使用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,因此可以成功启动服务器发送事件、长轮询和永久帧(取决于浏览器)等协议。然而,我不知道为什么iis8服务器在实现websockets不工作时不启动工作协议,这是signalr所做的,不是吗?

我联系了我的主机提供商,他们认为问题与服务器上不支持的SSL密钥有关。这个SSL问题仍然没有被他们修复,所以没有办法确定这是真正的问题。你觉得会是这样吗?

不管怎样,还是没有找到答案。请帮助。

好吧,时间太长了,我希望现在能得到帮助,但没关系,我设法做到了。

:

Jabbr的signalr频道的家伙建议我尝试使用SSL浏览网站,希望它能解决问题。恐怕我还没有机会检查一下。但如果你们中有人遇到同样的问题,并使用SSL方法来解决它,我绝对愿意在这里讨论!

我的回答是:

我正在使用用户IP并测试它是否在任何有问题的ISP子网中。如果是,我给我的视图传递一个参数,比如:bool disableWebsockets = True/False;如果它是真的,我传递信号的传输协议列表,不包括websockets。如果为false -该列表不包含websockets。

function signalrTransportList(wsState) {
    if (disableWebsockets == "False") {
        var list = ['webSockets', 'serverSentEvents', 'longPolling', 'foreverFrame'];
    }
    else {
        var list = ['serverSentEvents', 'longPolling', 'foreverFrame'];
    }
    return list;
}
...
...
$.connection.hub.start({ transport: signalrTransportList(wsTransport) })

最新更新