SignalR:有没有被允许的误差访问控制允许来源

问题描述:

试图从另一个域调用signalR,并不断收到此错误:SignalR:有没有被允许的误差访问控制允许来源

XMLHttpRequest cannot load localhost:62150/signalr/negotiate?_=1362242757692. Origin localhost:4982 is not allowed by Access-Control-Allow-Origin.

这是我想要的代码运行:

$(function() { 
    jQuery.support.cors = true; 
    $.connection.hub.url = 'http://localhost:62150/signalr'; 
    $.connection.hub.start() 
     .done(function() { alert("Now connected!"); }) 
     .fail(function() { alert("Could not Connect!"); }); 
}); 

jQuery和jquery.signalr.js加载中为localhost:62150/signalr /集线器与JS响应为localhost:62150/signalr /集线器/谈判_ = 1362243021215返回JSON我办这个吗?浏览器 - 所以它不是缺少脚本或无效路径问题。

我已经试过什么:

以上所有的组合。

任何人有任何想法我可以尝试什么?

服务应用程序是MVC和WebAPI的组合(不要认为它有任何区别)。 如果我尝试从同一个域的代码 - 它的工作。

+0

?它支持CORS吗? – 2013-03-02 17:05:18

+0

Chrome。我可以通过ajax跨Web调用Web Api,所以是的。 – Evgeni 2013-03-02 18:17:48

如果您使用的是1.0或更高版本,您是否在服务器上启用了跨域? (它在默认情况下现已停用)

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

以前的版本是预发行版本,SignalR 1.0是第一个RTM版本,所以这不是一个突破性更改;-) – 2013-03-02 19:43:18

+1

FWIW这个更改在发布说明中的“1.0重大更改”中被突出提及。 https://github.com/SignalR/SignalR/blob/master/ReleaseNotes.md是查找每个版本中更改的最佳位置。 – halter73 2013-03-03 08:17:03

+2

我得到了上面的错误,即使我有这行代码。如果我使用RouteTable.Routes.MapHubs()代替,我将得到304.我的代码使用IE10和FF 20,但不使用Chrome 25.0.1364.172。任何想法? – Adamy 2013-03-15 05:02:19

浪费了几个小时,我觉得这是很好的分享我的经验后:

  1. DO访问控制允许来源不添加到您的web.config(是的,它从来没有添加它,但尝试的时候,这是字面上我做的第一次,并在一个简单的jQuery跨域访问测试后留在那里)

  2. RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true });工作得很好,集线器

  3. RouteTable.Routes.MapConnection<MyConnection>("foo", "/foo", new ConnectionConfiguration { EnableCrossDomain = true });这工作得很好太为你使用的是什么浏览器中测试这个类继承PersistentConnection