2015-05-20 8 views
10

Nella mia applicazione ho una notifica di socket che funziona alla grande quando viene eseguita localmente, ma quando si esegue il deployment sulla mia VM, si lamenta di dare il seguente messaggio.SignalR "Errore durante la richiesta di negoziazione"

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) 

sta andando tra domini, ma credo di aver ottenuto oltre le questioni CORS, ma potrei sbagliarmi.

EDIT

Ecco informazioni aggiuntive che so sarà chiesto.

Richiesta:

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 

Risposta:

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

supporto CORS è l'installazione sul server.

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

Hai impostato il supporto cors sul server? In particolare, è necessario modificare la chiamata a MapHubs per abilitare le richieste tra domini. –

+0

@WilliamXifaras Sì, ho appena modificato il mio post. Ho il 'UseCors (CorsOptions.AllowAll)' – TheJediCowboy

+0

Sei sicuro che questo sia CORS che sta causando il problema? Vorrei provare prima senza CORS (ad esempio, creare un client C# veloce e sporco) per assicurarmi che l'app funzioni davvero. In questo momento, potresti provare a risolvere un problema sbagliato. – Pawel

risposta

3

Ho avuto lo stesso problema durante la connessione a hub signalR dal mio progetto web poi aggiungo

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

di riscrivere le regole in file web.config poi hub signalR diventato raggiungibile.

mio codice di connessione hub client è sotto

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

Puoi condividere come appare la regola completa di riscrittura? – JacobIRR

5

Inoltre, assicurarsi WebSockets è abilitata sul vostro host signalr. Se si tratta di un PC Windows, controllare se Websockets è abilitato in Pannello di controllo-> Programmi-> Attiva o disattiva le funzionalità di Windows.

Se si tratta di un server Windows, Microsoft fornisce istruzioni passo passo su come abilitare WebSockets http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support.

Ho avuto l'installazione di CORS in Signalr config ma ho ancora ottenuto lo stesso errore e si è scoperto che era il mio problema. Spero che sia d'aiuto!

+0

Purtroppo questo non ha risolto il problema nel mio caso –

Problemi correlati