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

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

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

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

jQuery.support.cors = true;

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

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

Ответы [ 6 ]

35 голосов
/ 03 апреля 2012

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

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

    RouteTable.Routes.MapHubs(new HubConfiguration()
    {
      EnableCrossDomain = true
    });
    
9 голосов
/ 28 января 2016

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

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

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

7 голосов
/ 05 июля 2012

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

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

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

$.connection.hub.start({ jsonp: true }, function () {...
4 голосов
/ 12 июля 2014

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

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

1 голос
/ 25 октября 2013

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

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

1 голос
/ 22 мая 2012
var connection = $.connection('http://somecrossdomainurl/echo')
connection.start({ transport: 'longPolling', xdomain: true });

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

...