2016-03-02 56 views
1

我有一個ServerEventsFeature的服務。我使用默認情況下向服務發送心跳的ServerEventsClient。據我所知,ServiceStack不支持從框中過期,但會話生命週期在每次心跳後刷新。這是應該如何,有沒有辦法控制它?我已經通過將SessionExpiry設置爲30秒和HeartbeatInterval設置爲20秒進行了測試 - 該應用會發送多個(10+)心跳來避免任何問題。另外,如果客戶端應用程序崩潰並強制關閉 - 會話將在服務器會話列表中「活着」,直到我嘗試使用它,是否有辦法在早期放棄它?ServiceStack會話生命週期在心跳上增加

實施例:

  1. 啓動服務器

  2. 發射客戶機1

執行

var sessionPattern = IdUtils.CreateUrn<IAuthSession>(""); 
var sessionKeys = Cache.GetKeysStartingWith(sessionPattern).ToList(); 
var allSessions = Cache.GetAll<IAuthSession>(sessionKeys); 

結果計數爲1

  • 發射客戶端2和3

  • 降客戶機1通過力關閉(無註銷呼叫)

  • 再次執行相同的代碼 - 結果計數是3

  • 回答

    1

    服務器事件訂閱對用戶會話沒有任何影響。

    一個用戶會話創建用戶認證成功後,當他們明確註銷或當會話終結經過被破壞。

    服務器事件訂閱只是對用戶長期HTTP連接的引用,指向SSE /event-stream,它與用戶會話僅有關係,訂閱可能是經過身份驗證的用戶的訂閱。

    但是,用戶會話(它只是一個AuthUserSession POCO持久存在於註冊的ICacheClient中)的生命週期不受服務器事件訂閱的影響,因爲它永遠不會重新保存用戶會話,所以永遠不要更改會話過期。

    +0

    然後它看起來像我編碼錯了。謝謝,我會進行額外的測試 – HardLuck