2

尝试从另一个域调用 signalR,并继续收到此错误:

XMLHttpRequest 无法加载 localhost:62150/signalr/negotiate?_=1362242757692。Access-Control-Allow-Origin 不允许 Origin localhost: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 的组合(不要认为它有任何区别)。如果我尝试来自同一域的代码 - 它可以工作。

4

2 回答 2

5

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

RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });
于 2013-03-02T18:33:03.717 回答
3

在浪费了几个小时之后,我认为分享我的经验很好:

  1. 不要将 Access-Control-Allow-Origin 添加到您的 web.config 中(是的,它永远不会添加它,但是在尝试事情时,这实际上是我第一次做的事情,并且在一个简单的 jquery 跨域访问测试之后将它留在那里)

  2. RouteTable.Routes.MapHubs( new HubConfiguration() { EnableCrossDomain = true } );适用于继承 Hub 的类

  3. RouteTable.Routes.MapConnection<MyConnection>( "foo", "/foo", new ConnectionConfiguration { EnableCrossDomain = true } );这对于继承 PersistentConnection 的类也很有效

于 2013-07-10T19:52:00.537 回答