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

Как использовать междоменные подключения (CORS - Контроль доступа разрешить происхождение) с помощью SignalR

Используя постоянные соединения и клиент ASP.NET JavaScript, я пытаюсь подключиться к поддоку, не то же самое, что и страница, из которой была отправлена ​​страница.

Страница ASP.Net с веб-сервера sub1.mydomain.com хочет подключиться к SignalR в sub2.mydomain.com. Тот же код отлично работает при подключении в пределах одного и того же поддомена.

Я нашел еще одно сообщение, в котором междоменные подключения были включены:

jQuery.support.cors = true;

но это не сработало для меня.

Как подключиться к SignalR во втором поддомене, используя постоянное соединение и клиент JavaScript?

4b9b3361

Ответ 1

Чтобы заставить его работать, вам необходимо выполнить одно из следующих действий:

  • Настройте $.connection.hub.url = 'http://subdomain.domain.com/signalr';, указывая на ваш поддомен.
  • Включить кросс-домен на сервере:

    RouteTable.Routes.MapHubs(new HubConfiguration()
    {
      EnableCrossDomain = true
    });
    

Ответ 2

Если вы переключаетесь с 0.5.1 на 0.5.2, возможно, у вас было следующее:

$.connection.hub.start({ transport: 'longPolling', xdomain: true }, function () {...

Что можно изменить на:

$.connection.hub.start({ jsonp: true }, function () {...

Ответ 3

В текущей версии SignalR, используя теперь отдельный пакет CORS, API для этого изменился на:

public void Configuration(IAppBuilder app)
{
    app.Map("/signalr", map =>
    {
        map.UseCors(CorsOptions.AllowAll);
        var hubConfiguration = new HubConfiguration
        {
        };
        map.RunSignalR(hubConfiguration);
    });
}

См. Руководство API API SignalR для ASP.NET - клиент JavaScript.

Ответ 4

В Signalr2 вы можете использовать предварительный выпуск Microsoft.Owin.Cors, в настоящее время 3.0.0-rc1, как написав это: Microsoft.Owin.Cors.

Более подробную информацию можно найти здесь:

Ответ 6

Что действительно решило мою проблему:

1 - Добавьте это в global.asax:

RouteTable.Routes.MapHubs(new HubConfiguration() { 
    EnableCrossDomain = true 
});

2- Настройте web.config моего веб-проекта, чтобы включить кросс-домен:

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Headers" value="Content-Type" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

3- Затем я меняю реализацию на свой html, меняя значение $.connection() следующим образом:

var connection = $.hubConnection('http://localhost.my:8081/signalr');
var chatHubProxy = connection.createHubProxy('chatHub');

Версии, которые я использую:

  • signalR-1.1.0

  • jquery.signalR-1.1.3.js

  • dot.net 4.0