2012-12-29 66 views
1

跨域持久连接似乎做工精细,用这个例子来看:与signalR跨域hubConnection

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

您使用的是SignalR的错误版本。使用最新的(1.0 rc1)。 CORS头被自动添加。 – davidfowl

+0

啊,我甚至不知道有1.0。谢谢! –

回答

0

正如dfowler在他的评论中写道的,问题是我使用的是旧版本的SignalR。

注意别人谁读这样的:你需要设置JSONP:真正的连接选项为它工作。

+0

也不是这种情况... – davidfowl