我正在开发一个概念验证应用程序,演示如何使用ServiceStack来使用服务器事件。在此应用程序中,所有操作都必须由经过身份验证的用户完成,并且我已基于CredentialsAuthProvider实现了自己的身份验证提供程序。
该应用程序还要求客户端随意加入和离开频道。由于服务器事件的工作方式,这意味着每次客户端加入新通道或离开现有通道时,都会创建一个新的ServerEventsClient实例。
这给我带来了一个问题,因为当创建ServerEventsClient的新实例时,它不再被授权,此时我没有凭据再次授权它,并且要求客户端不方便再一次。
此问题的适当解决方案是什么?如何在服务器事件客户端连接之间重新验证或保留会话信息?
或者,有没有办法让客户加入/离开频道而无需重新创建连接?
谢谢!
答案 0 :(得分:2)
您需要将ServiceStack的ss-id/ss-pid Session Cookies从旧的ServerEventClient ServiceClient传输到新客户端,您应该可以通过手动复制cookie(例如使用GetCookieValues()/SetCookie()
)或分配整个CookieContainer,例如:
var oldClient = (JsonServiceClient)sseOld.ServiceClient;
((JsonServiceClient)sseNew.ServiceClient).CookieContainer = sseOld.CookieContainer;