Как использовать междоменные подключения (CORS - Контроль доступа разрешить происхождение) с помощью SignalR
Используя постоянные соединения и клиент ASP.NET JavaScript, я пытаюсь подключиться к поддоку, не то же самое, что и страница, из которой была отправлена страница.
Страница ASP.Net с веб-сервера sub1.mydomain.com
хочет подключиться к SignalR в sub2.mydomain.com
. Тот же код отлично работает при подключении в пределах одного и того же поддомена.
Я нашел еще одно сообщение, в котором междоменные подключения были включены:
jQuery.support.cors = true;
но это не сработало для меня.
Как подключиться к SignalR во втором поддомене, используя постоянное соединение и клиент JavaScript?
Ответы
Ответ 1
Чтобы заставить его работать, вам необходимо выполнить одно из следующих действий:
Ответ 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.
Более подробную информацию можно найти здесь:
Ответ 5
var connection = $.connection('http://somecrossdomainurl/echo')
connection.start({ transport: 'longPolling', xdomain: true });
https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client
Ответ 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