2017-05-24 56 views
0

我正在嘗試使用.NET中的SignalR來創建一個既是客戶端又是服務器的單個應用程序。最終目標是將其與我們現有的產品相集成,因爲一臺計算機既可以充當客戶端,也可以充當服務器,而其他計算機都是客戶端。SignalR HubConnection立即關閉,無錯誤

Full source code on GitHub.

在客戶端啓動代碼,服務器啓動代碼完成後運行,下面的代碼運行:

m_hubConnection = new HubConnection("http://localhost:8080/"); 
m_myHubProxy = m_hubConnection.CreateHubProxy(nameof(ServerHub)); 
m_myHubProxy.On<string, string>(nameof(ServerHub.BroadCastMessage), (name, message) => OnMessageReceived(name, message)); 
m_hubConnection.Closed += OnClosed; 
m_hubConnection.Error += OnErrorReceived; 
await m_hubConnection.Start(new WebSocketTransport()); 
await SendMessage("Startup", "Sending from same thread as connection established"); 

的OnClosed回調幾乎是立刻調用,所以連接在啓動後立即關閉。

的OnErrorReceived回調不會被調用,所以它不會關閉所導致的任何明顯的錯誤

Start方法掛起並無法回撥

的SendMessage函數方法是從不打


理想情況下,我希望連接打開,保持打開狀態,讓SendMessage被擊中,向Hub發送消息,並將相同的消息廣播回客戶端。

關於發生什麼問題的任何想法?

+1

如果將URL更改爲'http:// localhost:8080/signalr',該怎麼辦? – Amy

+0

試了一下,沒有奏效。啓動配置使用「/ signalr」路徑進行映射。還嘗試在服務器的字符串中添加「/ signalr」(並且兩者一起),但沒有任何組合可以工作 – Carson

+0

在瀏覽器網絡選項卡中,您應該看到'connect?transport = .....'和'start?transport = .. ...'。那些獲得200迴應?在第二個請求的情況下,響應主體包含什麼內容?你的服務器是否啓用了Websocket? (如果你沒有使用瀏覽器來測試,你仍然可以使用Fiddler攔截並檢查請求/響應) – Amy

回答

0

修正了它,瘋狂愚蠢的錯誤。我只是從端口8080切換到8089.我想別的什麼是使用端口8080,但無論如何,切換客戶端和服務器端到端口8089固定它。