Je suis sur le point de me tirer d'affaire car tous les guides montrent la même ou les deux solutions qui semblent fonctionner pour tout le monde sauf moi-même. J'utilise SignalR dans une application Mono, en utilisant Owin. J'ai défini EnableCrossDomain = true dans mon HubConfiguration. J'ai mis en place une page de test simple en utilisant javascript pour me connecter. Les negotiate
et ping
sont en cours de chargement sans problème et semblent répondre correctement. Cependant, j'obtiens une erreur de domaine croisé sur l'appel connect
.Problème de connexion inter-site auto-hébergé avec SignalR et Mono et Owin
Il utilise définitivement mon paramètre EnableCrossDomain car si je le mets à false, negotiate
ne fonctionne pas.
Voici mon Javascript pour se connecter (et oui je suis compris le/signalr/moyeux de script qui renvoie le javascript approprié):
$.connection.hub.url = 'http://localhost:7001/signalr';
$.connection.hub.logging = true;
$.connection.hub.start()
.done(function() { alert("Now connected!"); })
.fail(function() { alert("Could not Connect!"); });
Aussi j'ai essayé jQuery.support.cors = true;
aussi bien mais il ne fait pas toute différence.
J'ai aussi essayé la connexion à un PersistantConnection régulière comme si, avec le même problème, il ne semble pas être en relation directe avec les moyeux:
var connection = $.connection('/raw');
connection.url = 'http://localhost:7001/signalr';
connection.start()
.done(function() { alert("Now connected!"); })
.fail(function() { alert("Could not Connect!"); });
Qu'est-ce que je fais mal ici? Pourquoi ping
et negotiate
fonctionnent mais pas connect
?
EDIT: Aussi pour rendre les choses plus étrange, j'ai ajouté l'enregistrement et vérifié que la classe SignalR CallHandler
ajoute l'en-tête Access-Control-Allow-Origin
pour toutes les demandes, y compris la demande connect
. Donc ça devrait marcher.
EDIT 2: Donc en fait grâce à gondoler il semble que le serveur renvoie un code de réponse 500, et comme il est pas aussi, y compris l'en-tête (ce qui doit se produire après le bloc de code, j'ai ajouté l'enregistrement à) , Chrome se plaint de cross site, alors qu'il y a probablement une exception quelque part dans le serveur. J'espère que je vais avoir compris cela sous peu et posterai une réponse ici.