使用signalR的跨域hubConnection

时间:2012-12-29 15:12:41

标签: cross-domain signalr

从这个例子来看,不同域之间的持久连接似乎工作正常:

http://jsfiddle.net/GSEJp

但是当我尝试使用“hubConnection”时,因为我的应用程序使用集线器而不是原始连接,浏览器会抱怨CORS。在浏览器中打开Javascript控制台并运行此小提琴:

http://jsfiddle.net/GSEJp/4/

即使我的Global.asax包含以下代码:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        this.Context.Response.AddHeader("Access-Control-Allow-Origin", "*");

        if (this.Context.Request.HttpMethod == "OPTIONS")
        {
            this.Context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
            this.Context.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Accept");
            this.Context.Response.End();
        }
    }

那可能是什么错?难道只是hubConnections在不同的域中不能很好地工作,或者它可能是我身边的东西吗?我应该提一下,我可以从本地REST客户端(Postman)向同一个MVC应用程序运行正常的XHR请求,所以我不应该有任何错误。

谢谢!

编辑:

经过一些挖掘后,我发现第一个jsfiddle中使用的signalr js文件有一个这个“xdomain”属性的定义。但它没有“hubConnection”的定义,所以这就是我切换到query.signalR-0.5.3.js的原因。但那个没有“xdomain”的定义。这可能就是我收到CORS错误的原因。

是否有支持xdomain和hubConnection的signalr js客户端版本?

再次感谢。

1 个答案:

答案 0 :(得分:0)

dfowler在评论中写道,问题在于我使用的是旧版SignalR。

请注意阅读此内容的其他人:您需要在连接选项中设置jsonp:true才能使其正常工作。