Подтвердить что ты не робот

Signalr не работает в определенных 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: Я заметил, что клиентские методы действительно работают, это методы сервера, которые не работают.

Что я имею в виду?:

У меня есть список пользователей в Интернете, а при входе пользователя и выходе на сайт вызывается метод клиентского сигнала signalr, который обновляет список имен пользователей:

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 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

Как вы можете видеть, клиентские методы отлично работают. Вызывается метод Server, но ничего не происходит.

Протокол регистрации в рабочей сети 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 код работает для всех интернет-провайдеров. Поскольку IIS 7.5 не поддерживает Websockets, успешно инициируются такие протоколы, как сервер-отправленные события, длительный опрос и вечный кадр (в зависимости от браузера). Однако я не знаю, почему сервер IIS 8 не запускает рабочий протокол при реализации веб-сокетов, не работает, что он делает signalr, не так ли?

Я установил контакт с моим хостинг-провайдером, они считают, что проблема связана с неподдерживаемым SSL-ключом на сервере. Эта проблема SSL по-прежнему не исправлена ​​ими, поэтому нет способа убедиться, что на самом деле проблема. Считаете ли вы, что это может быть?

В любом случае, пока не удастся найти ответ. Пожалуйста, помогите.

4b9b3361

Ответ 1

Ладно, это было так долго, и я надеялся получить помощь к настоящему времени, но неважно, что я это сделал.

Во-первых:

Ребята из канала signalr в Jabbr предложили мне попробовать серфинг на веб-сайте, используя SSL, в надежде, что это решит проблему. Боюсь, у меня не было возможности проверить это:( Но в случае, если кто-либо из вас встретит ту же проблему и будет использовать SSL-подход для ее решения, я бы без особого энтузиазма любил здесь об этом!

И к моему ответу:

Я беру IP-адрес пользователя и тестирую его в любой из проблемных подсетей ISP. Если это так, я передаю свой параметр view, скажем: bool disableWebsockets = True/False; Если это правда, я передаю signalr список транспортных протоколов, которые не содержат веб-узлов. Если false - список содержит веб-узлы.

Что это.

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) })