2016-03-02 91 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