web-dev-qa-db-fra.com

SignalR "Erreur lors de la demande de négociation"

J'ai une notification de socket dans mon application qui fonctionne très bien lorsque j'exécute localement, mais lorsque je déploie sur ma machine virtuelle, elle se plaint de donner le message suivant.

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)

Cela va à travers les domaines, mais je crois que j'ai dépassé les problèmes CORS, mais je peux me tromper.

MODIFIER

Voici des informations supplémentaires qui, je le sais, seront demandées.

Demande:

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

Réponse:

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

MODIFIER

La prise en charge de CORS est configurée sur le serveur.

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

Assurez-vous également que WebSockets est activé sur votre hôte signalr. S'il s'agit d'un ordinateur Windows, vérifiez si les sockets Web sont activées dans Panneau de configuration-> Programmes-> Activer ou désactiver les fonctionnalités Windows.

S'il s'agit d'un serveur Windows, Microsoft fournit des instructions étape par étape sur la façon d'activer WebSockets http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis -80-support-protocole-websocket .

J'avais installé CORS dans la configuration de Signalr mais j'ai toujours eu la même erreur et il s'est avéré que c'était mon problème. J'espère que ça aide!

7
Melvin Iwuajoku

J'ai eu le même problème lors de la connexion au hub signalR de mon projet Web, puis j'ajoute

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

pour réécrire les règles dans le fichier web.config, le concentrateur signalR est devenu accessible.

Le code de connexion de mon hub client est ci-dessous

$.hubConnection('/signalr', { useDefaultPath: false });
5
cimey