SignalR 1.0.1与Chrome的跨域请求(CORS)

我正在尝试使用SignalR 1.0.1与Chrome(Ver 25.0.1364.172)实现跨域调用。 因为我在一个主机(localhost:16881)中有我的UI,在另一个主机(localhost:16901)中有’service’。

我有一切就绪如主题如何使用SignalR的跨域连接(CORS – 访问控制允许来源)

add jQuery.support.cors = true; before opening a connection set up $.connection.hub.url = 'http://localhost:16901/signalr';, pointing to your subdomain allow cross-domain requests on server side, by adding the following header description:  inside system.WebServer/httpProtocol/customHeaders section in Web.config file. 

我还为在Signal. 1.0的global.asax中的路由映射设置了HubConfiguration

  RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true }); 

在IE10和FF22中一切都很好看。 但是在Chrome中,当SignalR尝试进行握手时,它给了我一个惊喜。

 XMLHttpRequest cannot load http://localhost:16901/signalr/negotiate?_=1363560032589. Origin http://localhost:16881 is not allowed by Access-Control-Allow-Origin. 

我知道我可以通过使用–disable-web-security启动它来使用它,但它并不真正符合我的要求。 请帮忙!

这是你需要做的:

  1. 删除jQuery.support.cors = true
  2. 删除

那它应该工作正常。

你不需要使用

jQuery.support.cors = true;

相反,您可以在Configuration方法的启动类上启用CORS支持。 以下是一些示例:

  // Branch the pipeline here for requests that start with "/signalr" app.Map("/signalr", map => { // Setup the CORS middleware to run before SignalR. // By default this will allow all origins. You can // configure the set of origins and/or http verbs by // providing a cors options with a different policy. map.UseCors(CorsOptions.AllowAll); var hubConfiguration = new HubConfiguration { // You can enable JSONP by uncommenting line below. // JSONP requests are insecure but some older browsers (and some // versions of IE) require JSONP to work cross domain // EnableJSONP = true }; // Run the SignalR pipeline. We're not using MapSignalR // since this branch already runs under the "/signalr" // path. map.RunSignalR(hubConfiguration); });