編集: これは明らかに Chrome のみの問題であり、FF と IE では正常に動作します。
Chrome バージョン: 27.0.1453.116
localhost:13371 に単純な JS/HTML サイトがあり、localhost:13371 の SignalR ハブにアクセスしようとしています。
リクエストが行われるたびに、次のエラーが発生します。
XMLHttpRequest を読み込めません
http://localhost:13370/signalr/hubs/negotiate?_=1372338722032
。http://localhost:13371
Access-Control-Allow-Origin でオリジンが許可されていません。
私がすでに試したこと:
SignalR on でクロスドメインを有効にし
Application_Start
ます。RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });
SignalR サーバーの Web.Config でクロスドメインを有効にします。
<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>
JavaScript で signalr のハブに接続 URL を設定する:
$.connection.hub.url = 'http://localhost:13370/signalr/hubs';
jQuery で CORS を有効にします。
$.support.cors = true;
で応答ヘッダーを手動で設定する
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(); } }
上記のいずれも、または上記の組み合わせも機能しませんでした。
追加情報:
- 両方のサイトが Windows 7 の IIS で実行されています
- SignalR サイトは、.NET 4.0 の MVC 4 サイトの一部として、ポート 13370 で実行されています。
- JS/HTML サイトは、ポート 13371 の単純な Web サーバーであり、マネージ コードはまったくありません。
- SignalR サイトは、問題のリソースに対するブラウザーからの直接の要求に確実に応答します。
- SignalR のバージョンは 1.1.2 です