Problèmes avec SignalR et de la Croix de Domaine de demandes de Chrome 27
EDIT: C'est apparemment un problème uniquement en Chrome, il fonctionne très bien dans FF et IE
Version de Chrome: 27.0.1453.116
J'ai une simple JS/HTML site sur localhost:13371, et j'essaye d'accéder à un SignalR hub à localhost:13371.
Lorsque la demande est faite, j'obtiens l'erreur suivante:
XMLHttpRequest ne peut pas charger
http://localhost:13370/signalr/hubs/negotiate?_=1372338722032
. Originehttp://localhost:13371
n'est pas autorisé par Access-Control-Allow-Origin.
Ce que j'ai déjà essayé:
- L'activation de la Croix-Domaine sur SignalR sur
Application_Start
:RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });
- L'activation de la Croix-Domaine du Web.Config de la SignalR serveur:
<system.webServer> <httpProtocol> <customHeaders> <clear /> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Methods" value="*" /> <add name="Access-Control-Allow-Headers" value="*" /> </customHeaders> </httpProtocol> </system.webServer>
- De la configuration de l'url de connexion sur signalr du hub en JavaScript:
$.connection.hub.url = 'http://localhost:13370/signalr/hubs';
- L'activation de la SCRO en jQuery:
$.support.cors = true;
- Réglage de l'en-tête de réponse manuellement dans
Application_BeginRequest
:protected void Application_BeginRequest(object sender, EventArgs e) { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); if (HttpContext.Current.Request.HttpMethod == "OPTIONS") { //These headers are handling the "pre-flight" OPTIONS call sent by the browser HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "*"); HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); HttpContext.Current.Response.End(); } }
Rien de ce qui précède, ni aucune combinaison de ceux-ci a travaillé.
Informations supplémentaires:
- Les deux sites sont en cours d'exécution dans les services IIS sur Windows 7
- La SignalR site est en cours d'exécution sur le port 13370 dans le cadre d'un MVC 4 site sous .NET 4.0.
- Le JS/site HTML est un simple serveur web sur le port 13371, pas de code managé.
- La SignalR site va certainement répondre à des demandes directes de la part du navigateur pour la ressource en question.
- SignalR version 1.1.2
Avez-vous essayez de lire asp.net/signalr/overview/hubs-api/...?
OriginalL'auteur Ben Lesh | 2013-06-27
Vous devez vous connecter pour publier un commentaire.
EDIT: j'ai trouvé deux solutions pour cela maintenant...
La méthode 1. se débarrasser de la merde vous n'avez probablement pas besoin:
Que j'ai trouvé dans ce Un Débordement de pile question, en gros presque tout ce que j'avais ajouté dans ma liste de "choses que j'ai essayé" ci-dessus ont été inutiles. Étapes de correction:
Supprimer tout ce que j'ai listé que j'ai essayé ci-dessus. Ce qui signifie pas d'en-têtes personnalisés spécifiés dans le Web.Config ou ailleurs comme le Mondial.asax, aucun jquery paramètres, etc.
.. sauf pour
RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });
Dans leApplication_Start
.Aussi, vous devez encore définir la
$.connection.hub.url = 'http://localhost:13370/signalr/hubs';
... c'est tout. c'est probablement la meilleure solution et celle que j'ai fini de l'utiliser.
La méthode 2. utilisation jsonp si vous rencontrez toujours des problèmes dans google Chrome:
Si vous rencontrez toujours des problèmes de ce genre dans Chrome, vous pouvez utiliser jsonp pour obtenir de négocier script à télécharger correctement... adjonction, à mon JavaScript hub commencer a résolu le problème:
Il est probable que la meilleure façon de le faire qui teste les capacités du navigateur et jeux de jsonp en conséquence... en regardant l'agent de l'utilisateur se sent sale comme l'enfer... mais cela a résolu mon problème dans l'intervalle. J'espère que cela aide quelqu'un d'autre.
OriginalL'auteur Ben Lesh
Cela a fonctionné pour moi. Mettre cette méthode à Global.asax.cs
OriginalL'auteur Akira Yamamoto
J'ai été confrontée au même problème dans ma MVC6 SignarR serveur.
À peine installé
Install-Package Microsoft.Owin.Cors
dans le Gestionnaire de Package Console & ajoutapp.UseCors(CorsOptions.AllowAll)
en Démarrage.cs.OriginalL'auteur Baqer Naqvi
C'est dans les docs, mais ne faites jamais ceci:
$.de soutien.la scro = true;
OriginalL'auteur Patrick Fletcher
ce qui a fonctionné pour moi est la suivante.
OriginalL'auteur spikingnet