2015-05-20 3 views
10

У меня есть уведомление сокетов в моем приложении, которое отлично работает при запуске локально, но когда я развертываю его на своей виртуальной машине, он жалуется на следующее сообщение.SignalR «Ошибка во время запроса на переговоры»

Error: Error during negotiation request. 
    at Object.signalR._.error (jquery.signalR.js:178) 
    at signalR.fn.signalR.start.onFailed (jquery.signalR.js:644) 
    at Object.signalR.fn.signalR.start.connection._.negotiateRequest.signalR.transports._logic.ajax.error (jquery.signalR.js:664) 
    at n.Callbacks.j (jquery.js:3094) 
    at Object.n.Callbacks.k.fireWith [as rejectWith] (jquery.js:3206) 
    at x (jquery.js:8261) 
    at XMLHttpRequest.n.ajaxTransport.k.cors.a.crossDomain.send.b (jquery.js:8600) 

Это происходит через домены, но я считаю, что я прошел мимо проблем CORS, но я мог ошибаться.

EDIT

Вот дополнительная информация, которую я знаю, что будет предложено.

Запрос:

GET http://path.to.my.vm/api/notifications/emmit/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22testemitter%22%7D%5D&_=1432140840826 HTTP/1.1 
Host: path.to.my.vm 
Connection: keep-alive 
Accept: text/plain, */*; q=0.01 
Origin: http://localhost:8100 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Referer: http://localhost:8100/ 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en,fr;q=0.8,en-US;q=0.6 

Ответ:

HTTP/1.1 500 Internal Server Error 
Date: Wed, 20 May 2015 17:01:18 GMT 
Server: Mono-HTTPAPI/1.0 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT 
Access-Control-Max-Age: 1000 
Access-Control-Allow-Headers: x-requested-with, Content-Type, origin,authorization, accept, client-security-token 
Content-Length: 0 
Connection: close 

EDIT

поддержка CORS настроен на сервере.

app.UseCors(CorsOptions.AllowAll); 
app.MapSignalR("",new HubConfiguration() 
    { 
     EnableJavaScriptProxies = true 
    }); 
+0

Была ли установлена ​​поддержка cors на сервере? В частности, вам нужно изменить свой вызов на MapHubs, чтобы разрешить междоменные запросы. –

+0

@WilliamXifaras Да, я только что редактировал свой пост. У меня есть 'UseCors (CorsOptions.AllowAll)' – TheJediCowboy

+0

Вы уверены, что это CORS, который вызывает проблему? Я попробую сначала без CORS (например, создать быстрый и грязный клиент C#), чтобы убедиться, что приложение действительно работает. Прямо сейчас, возможно, вы попытаетесь решить неправильную проблему. – Pawel

ответ

3

У меня была такая же проблема при подключении к концентратору signalR от моего веб-проекта, то я добавляю

<add input="{REQUEST_URI}" pattern="^/(signalr)" negate="true" /> 

переписать правила в файле web.config затем signalR хаб стал доступен.

Мой клиент ступица код подключения ниже

$.hubConnection('/signalr', { useDefaultPath: false }); 
+0

Можете ли вы поделиться тем, как выглядит полное правило перезаписи? – JacobIRR

5

Кроме того, убедитесь, что WebSockets включен на signalr хосте. Если это компьютер Windows, проверьте, включены ли веб-узлы в панели управления -> Программы-> Включить Windows.

Если это сервер Windows, Microsoft предоставляет пошаговые инструкции по включению WebSockets http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support.

У меня была настройка CORS в конфигурации Signalr, но все же была та же ошибка, и оказалось, что это была моя проблема. Надеюсь, поможет!

+0

К сожалению, это не решило проблему в моем случае –