2012-12-29 65 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