WedX - журнал о программировании и компьютерных науках

SignalR между доменами: ошибки, не разрешенные Access-Control-Allow-Origin

Пытаюсь вызвать signalR из другого домена и продолжаю получать эту ошибку:

XMLHttpRequest не может загрузить localhost:62150/signalr/negotiate?_=1362242757692. Исходный локальный хост: 4982 не разрешен Access-Control-Allow-Origin.

Это код, который я пытаюсь запустить:

$(function () {
    jQuery.support.cors = true;
    $.connection.hub.url = 'https://localhost:62150/signalr';
    $.connection.hub.start()
        .done(function () { alert("Now connected!"); })
        .fail(function () { alert("Could not Connect!"); });
});

jquery и jquery.signalr.js загружены, localhost: 62150/signalr/hubs отвечает JS, localhost: 62150/signalr/hubs/negotiate?_=1362243021215 возвращает JSON, если я запускаю это в браузере, так что это не отсутствующий скрипт или проблема с неверным путем.

Что я пробовал:

  • https://coding4life.wordpress.com/2012/03/30/making-cross-domain-calls-in-signalr/ (настройка jQuery.support.cors и $.connection.hub.url)
  • Добавление пользовательского заголовка в web.config со значением «Access-Control-Allow-Origin» = «*» (это работает только в IIS?)
  • Создание модуля http, который будет возвращать этот заголовок при каждом запросе. Также пытался вернуть фактическое доменное имя вместо *.

И комбинации всего вышеперечисленного.

Кто-нибудь знает, что еще я могу попробовать?

Обслуживающее приложение представляет собой комбинацию MVC и WebAPI (не думаю, что это имеет какое-либо значение). Если я пробую этот код из того же домена - он работает.


  • Какой браузер вы используете, чтобы проверить это? Поддерживает ли он CORS? 02.03.2013
  • Хром. Я могу делать междоменные вызовы Web Api через ajax, так что да. 02.03.2013

Ответы:


1

Если вы используете версию 1.0 или выше, включили ли вы междоменный доступ на сервере? (сейчас он отключен по умолчанию)

RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });
02.03.2013
  • предыдущие версии были предварительными, а SignalR 1.0 — первой RTM-версией, так что это не критическое изменение ;-) 02.03.2013
  • FWIW это изменение заметно упоминается в примечаниях к выпуску в разделе 1.0 «Ключевые изменения». github.com/SignalR/SignalR/blob/master/ReleaseNotes.md — лучшее место для поиска изменений в каждом выпуске. 03.03.2013
  • Я получил ошибку выше, даже если у меня есть эта строка кода. Если вместо этого я использую RouteTable.Routes.MapHubs(), я получу 304. Мой код работает с IE10 и FF 20, но не с Chrome 25.0.1364.172. Есть идеи? 15.03.2013
  • Я получаю этот вывод: ...\Global.asax.cs(17,64,17,81): ошибка CS0117: "Microsoft.AspNet.SignalR.HubConfiguration" не содержит определения для "EnableCrossDomain"...\Global .asax.cs(17,13,17,91): ошибка CS0619: «System.Web.Routing.SignalRRouteExtensions.MapHubs (System.Web.Routing.RouteCollection, Microsoft.AspNet.SignalR.HubConfiguration)» устарела: «Использовать IAppBuilder.MapSignalR в классе запуска Owin. Дополнительные сведения см. на странице go.microsoft.com/fwlink/?LinkId=320578. ' 03.02.2014

  • 2

    Потратив пару часов, я думаю, что хорошо поделиться своим опытом:

    1. НЕ добавляйте Access-Control-Allow-Origin в ваш web.config (да, он никогда не добавлял его, но при попытке что-то сделать, это буквально первое, что я сделал, и оставил его там после простого jquery проверка междоменного доступа)

    2. RouteTable.Routes.MapHubs( new HubConfiguration() { EnableCrossDomain = true } ); отлично работает для классов, наследующих Hub

    3. RouteTable.Routes.MapConnection<MyConnection>( "foo", "/foo", new ConnectionConfiguration { EnableCrossDomain = true } ); это прекрасно работает и для классов, наследующих PersistentConnection

    10.07.2013
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]