Междоменный запрос SignalR IE9 не работает

Я делаю приложение с помощью SignalR.

Хаб размещается на одном сервере под управлением Windows Server 2012 с IIS 8. http://mentor.cloudapp.net/mass/rexona/previa/signalr/hubs.

Клиент находится здесь: http:// massdeveloperstage.com/Rexona/Site/colombia/Previa/Match?matchId=6F318A29-3400-444B-95D9-7EC41A7AD2D4

Настройка Signalr выглядит следующим образом:

var match;
    $(document).ready(function () {
        $.connection.hub.loging = true;
        match = $.connection.match;

    match.client.addMessage = function (message) {
        var vm = {
            avatar: message.ProfileImageLocation,
            content: message.Text,
            user: message.UserScreenName,
            obj: JSON.stringify(message)
        };
         alert(vm.obj);
   }
  $.connection.hub.url = 'http://mentor.cloudapp.net/mass/rexona/previa/signalr';

    $.connection.hub.start().done(function () {
        match.server.addToGroup("97-987-PP");
    }).fail(function () {
          //alert("fail!");
    });

Все отлично работает в Chrome, FF, Opera и в IE10, но когда к нему обращаются через IE9, приложение не работает.

Я что-то упустил в настройке соединения? Нужно ли мне активировать что-то еще на сервере, чтобы работать с IE9?

Спасибо.


person dnlgmzddr    schedule 26.11.2012    source источник
comment
Вы когда-нибудь заставляли это работать?   -  person stricq    schedule 13.07.2015


Ответы (1)


Я думаю, вы пытаетесь сделать CORS (Cross-Site Origin Sharing) там. В IE9 это не работает, см. это для подробного обсуждения и страница Microsoft для точные ограничения. Это делается с помощью пользовательского объекта XDomainRequest вместо XMLHttpRequest и...

  1. Доступ к целевому URL-адресу должен осуществляться с использованием протоколов HTTP или HTTPS.
  2. Доступ к целевому URL-адресу должен осуществляться только с использованием HTTP-методов GET и POST.
  3. К запросу нельзя добавлять настраиваемые заголовки.
  4. Для заголовка Content-Type запроса поддерживается только text/plain (без мыла, json или закодированных типов данных!)
  5. Никакая аутентификация или файлы cookie не будут отправлены с запросом
  6. Запросы, ориентированные на URL-адреса интрасети, могут быть сделаны только из зоны интрасети.
  7. Запросы должны быть направлены на ту же схему, что и страница хостинга.

Изменить: на самом деле я никогда не использовал SignalR, этот ответ был основан на CORS в целом. Согласно комментарию @stricq, для работы с SignalR в IE требуется включить длительный опрос, как описано в здесь.

person eis    schedule 26.11.2012
comment
Я просто удаляю эту строку: jQuery.support.cors = true;, но в IE9 нет никаких изменений. Любая другая идея? Спасибо за ваше время. - person dnlgmzddr; 27.11.2012
comment
упоминаются дополнительные требования для IE9. Это исправит это, только если вы следовали все остальные требования тоже. Например JSON не поддерживается. - person eis; 27.11.2012
comment
Я проголосовал против, потому что здесь нет информации о том, как заставить SignalR работать в IE9. О чем конкретно и был вопрос. - person stricq; 13.07.2015
comment
При использовании групп IE9 не работает, если вы явно не включите longPolling. widecodes.com/CNVVeWPgqq/ $.connection.hub.start({ transport: ['webSockets', 'longPolling'] }); - person stricq; 13.07.2015