Как использовать междоменные соединения (CORS-Access Control Allow Origin) с SignalR

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

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

Я нашел еще один пост, где междоменной связи с поддержкой:

jQuery.support.cors = true;

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

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

6 ответов


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

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

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

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

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

который можно изменить на:

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

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

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

см.ASP.NET SignalR Hubs API Guide-JavaScript Client.


в Signalr2 вы можете использовать предварительный выпуск Microsoft.Оуин.Пдбс в настоящее время 3.0.0-rc1 и на момент написания этого:Microsoft.Оуин.Пдбс.

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


var connection = $.connection('http://somecrossdomainurl/echo')
connection.start({ transport: 'longPolling', xdomain: true });

https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client


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

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

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

2 - настройка интернета.конфигурация моего веб-проекта для включения междоменного:

<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, изменяя $.подключение () к следующему:

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