2013-03-11 35 views
1

我有一個項目從mvc4 c#razor引擎構建。 我添加了最新的signalr nuget包1.0.1 我的項目使用表單認證。signalr連接ID格式不正確

> "NetworkError: 500 Internal Server Error - 
> http://myhost:51090/signalr/abort?transport=serverSentEvents&connectionToken=uIJvYLP3T0GdHaowIlS4uPDA19ukUy7TaW8dcXoPfma4Mr52uoe7PLK9Hh3ip17X_3RbFXx92yEa7nxYVHaCiRAWVE5e05vvpLD0_blb94eUwdkXbmhkRPM2_Z590A64VBF2-eLB_8wCWq-dmkkkbe6EqP6c9YXN3WRF5IyNYkB6Wkom7O1ZoDavQQ0UWvok0" 

,並在服務器端:

The connection id is in the incorrect format. 

我需要考慮與signalr工作的每一個用戶從登錄進入到退出,反之亦然我在客戶端上得到一個錯誤的時間 不同的方式(從https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs),然後與身份驗證?

+0

你解決了你的問題,如果是的話 - 怎麼樣? :) – 2014-05-15 18:38:35

+0

是的,在做FormAuthentication.SignOut需要從客戶端調用hub.stop() – 2014-05-16 22:15:01

回答

1

看起來你正在註銷(修改你的用戶),而你有一個活動的SignalR連接。

發生這種情況的原因是因爲在服務器上的中止請求上,我們檢查connectionId是否與正確的用戶關聯。因此,在連接仍處於活動狀態時註銷會導致您失去用戶關聯並導致錯誤。

要解決此問題,請在註銷之前停止SignalR連接。

+1

之前,客戶端應該斷開連接您可以共享一個代碼示例,顯示如何停止給定用戶的所有信號連接? – Dennis 2013-05-27 07:52:29

+0

這將是一個非常複雜的代碼片段。本質上,您需要跟蹤與用戶關聯的所有ConnectionId,然後創建斷開客戶端的客戶端方法。一旦你有了這兩部分,只要你想停止一個用戶的所有連接,你只需調用客戶端函數就可以停止與用戶關聯的所有ConnectionId的連接。 – 2013-05-27 07:57:15

+0

當客戶無法控制何時可以註銷時,如何處理或容忍這種情況?例如基於sso的令牌過期或無效,因爲在其他地方使用相同的憑據?我只談論JS客戶端。最終客戶端將被髮送到sso,因爲令牌無效,但即使如此,我認爲中止請求導致此異常。據我所知,HubPipelineModule.OnIncomingError永遠不會被調用。 – 2013-09-13 22:05:11