2013-08-22 83 views
1

我正在嘗試的應該是基本的;但必須缺少一些東西。在本地運行的MVC3應用程序中定義了幾個SignalR Hub。同樣的解決方案有Windows Phone 8 &這是一個Windows應用商店應用程序,它們都與SignalR集線器進行實時通信。 SignalR服務器使用最新的位&客戶端使用最新的.NET nuget。來自Windows Phone的SignalR Hub連接8

在客戶端,這是我已經習慣了寫:

 IHubProxy SignalRChatHub; 
     HubConnection chatConnection = new HubConnection("http://localhost:53478/"); 
     SignalRChatHub = chatConnection.CreateHubProxy("ChatHub"); 

     await chatConnection.Start(); 
     if (chatConnection.State == Microsoft.AspNet.SignalR.Client.ConnectionState.Connected) 
     { 
      // Stuff here. 
     } 

這工作完全正常使用Windows 8應用程序客戶端&我們可以很方便的連接在IIS上與本地運行SignalR樞紐。但是,相同的代碼不適用於Windows Phone客戶端。 connection.start()以404異常爆炸。

經過一番研究,它看起來像WP Emulator虛擬機被視爲不同的機器,並虛擬使用主機的網絡。因此,IIS可能會阻止來自外部的呼叫,從而不允許從Windows Phone 8應用程序進入SignalR中心。因此,我調整了SignalR服務器應用程序的applicationhost.config以允許來自本地外部的連接。所以現在,SignalR集線器在本地主機和本地IP都可以使用。此外,該路由已被更改爲允許的Global.asax.cs跨域SignalR連接:

RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true }); 

而Windows Phone客戶端代碼更改爲:

HubConnection chatConnection = new HubConnection("http://<LocalIP>:53478/"); 

但這仍然失敗了connection.start()與「遠程服務器返回錯誤:未找到」異常。我有Fiddler從電話模擬器中嗅探網絡流量,並且完全沒有響應connection.start()調用。

我錯過了什麼?任何指針都會有幫助。謝謝!

回答