【发布时间】:2015-10-27 00:54:12
【问题描述】:
我们拥有的是一个 ASP.NET Web 应用程序,它也执行一些 signalR 通知。由于 SignalR 无法访问 ASP.NET 会话状态,我们需要一些其他方法来验证它们是在 Web 应用程序上登录的客户端。
在大多数情况下,您会认为静态字典会有所帮助。只要其中一个 ASP.NET 控制器确保保留关键客户端信息的缓存(通过 IP/浏览器信息,或客户端稍后发送给 signalR 的某些生成的令牌)——只要完成了,然后 SignalR可以在将客户端连接添加到其池之前对其进行验证。
然而我们在服务器场的情况下工作,SessionState 由 SQL 支持。这意味着给定的服务器实例,即使它拥有所有客户端的静态缓存,也可能不知道客户端 C。当然,如果客户端 C 发出正常的 Web 请求,它会 知道 em>在客户端 C 获取 SessionState 时找出它。所以问题是,如果工作在正确/错误的时间被移交给第二个服务器实例(机器 B),其中机器 B 不知道客户端 C(除了通过上下文相关的 SessionState 获取,无法从 SignalR 访问) , 我们如何在 SignalR 端验证客户端?
它所需要的只是一些获取所有客户端的静态方法,或者只是 SessionState 的“静态”上下文(即服务器会话状态)。因为无论哪种方式,我们都可以筛选各个客户端的 SessionStates 并验证“是的,这个客户端在之前的机器上有一个会话状态”。
除了让客户端重新加载页面之外,还有其他方法可以让 ASP.NEt 在本地“缓存”其信息吗?这是我目前看到的唯一方式。
【问题讨论】:
标签: asp.net signalr session-state