尝试从另一个域调用signalR,并继续收到此错误:
XMLHttpRequest无法加载 本地主机:62150 / signalr /谈判_ = 1362242757692?起源 本地主机:Access-Control-Allow-Origin不允许使用4982。
这是我正在尝试运行的代码:
$(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 / hubs用JS响应,localhost:62150 / signalr / hubs / negotiate?_ = 1362243021215如果我在浏览器中运行它则返回JSON - 所以它不是缺少脚本或无效的路径问题。
我尝试了什么:
以上所有的组合。
任何人都知道我还能尝试什么?
服务应用程序是MVC和WebAPI的组合(不要认为它有任何区别)。 如果我正在尝试来自同一个域的代码 - 它可以工作。
答案 0 :(得分:5)
如果您使用的是1.0或更高版本,您是否在服务器上启用了跨域? (现在默认禁用)
RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });
答案 1 :(得分:3)
浪费了几个小时后,我认为分享我的经验是好的:
不要将Access-Control-Allow-Origin添加到你的web.config中(是的,从来没有添加它,但是在尝试时,这实际上是我做的第一个并且离开了它在一个简单的jquery跨域访问测试之后)
RouteTable.Routes.MapHubs( new HubConfiguration() { EnableCrossDomain = true } );
适用于继承Hub
RouteTable.Routes.MapConnection<MyConnection>( "foo", "/foo", new ConnectionConfiguration { EnableCrossDomain = true } );
这对于继承PersistentConnection的类来说也很好用