编辑:这显然只是 Chrome 中的一个问题,它在 FF 和 IE 中运行良好
铬版本:27.0.1453.116
我在 localhost:13371 上有一个简单的 JS/HTML 站点,我正在尝试访问位于 localhost:13371 的 SignalR 集线器。
每当发出请求时,我都会收到以下错误:
XMLHttpRequest 无法加载
http://localhost:13370/signalr/hubs/negotiate?_=1372338722032
。Access-Control-Allow- Originhttp://localhost:13371
不允许 Origin。
我已经尝试过的:
在 SignalR 上启用跨域
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 中的信号器集线器上设置连接 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,根本没有托管代码。
- SignalR 站点肯定会响应浏览器对相关资源的直接请求。
- SignalR 版本是 1.1.2