2015-04-23 57 views
2

設置:SignalR 2.2.0「Context.ConnectionId」 .Net客戶端可以當我做不來手動

Connection = new HubConnection(uri); 
Connection.ConnectionId = "89668c32-c654-40a2-96c3-21a888f31c9f"; 
Connection.Start(new LongPollingTransport()) 

第二行什麼也不做,和我的樞紐看到,每次不同的ID。有任何想法嗎?

+0

我無法重現此問題。每次看到設置的ConnectionId。你能提供一個更完整的例子嗎? –

+0

你在使用LongPollingTransport()嗎? – LastTribunal

+0

這裏有什麼情況?連接標識由服務器在客戶端連接時分配,因此您如何知道在客戶端上將其設置爲什麼? – Pawel

回答

1

連接ID由服務器分配和跟蹤。客戶端在連接協商期間收到連接標識。除了在連接協商期間的連接ID之外,客戶端還會收到服務器上計算出的連接令牌(您可以在this blog post中找到有關連接協商和SignalR協議的更多詳細信息)。連接令牌是使用用戶名和連接標識計算出來的,然後進行加密。客戶端必須在每個請求中發送連接令牌。如果客戶端沒有發送連接令牌,或者客戶端發送的連接令牌與連接將被拒絕的加密數據不匹配(更多連接令牌爲here)。因此,儘管您可能通過重用連接Id /連接令牌來破解環境,但服務器知道在客戶端上設置連接ID並不是受支持的方案,實際上,ConnectionId屬性應該甚至沒有setter(其實IConnection.ConnectionId屬性只有一個getter)。