Как использовать междоменные соединения (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);
});
}
в Signalr2 вы можете использовать предварительный выпуск Microsoft.Оуин.Пдбс в настоящее время 3.0.0-rc1 и на момент написания этого:Microsoft.Оуин.Пдбс.
более подробную информацию можно найти здесь:
var connection = $.connection('http://somecrossdomainurl/echo')
connection.start({ transport: 'longPolling', xdomain: true });
что действительно решили мою проблему было:
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