我们拥有的ASP.NET Web应用程序也可以执行一些signalR通知。由于SignalR无法访问ASP.NET会话状态,因此我们需要一些其他方法来验证它们是在Web应用程序上登录的客户端。
在大多数情况下,您会认为静态字典会有所帮助。只要其中一个ASP.NET控制器确保保留关键客户端信息的缓存(通过IP /浏览器信息,或客户端稍后发送到signalR的某些生成令牌) - 只要完成此操作,然后SignalR可以在将客户端连接添加到池中之前验证它。
然而我们正在服务器场的情况下工作,SessionState由SQL支持。这意味着一个给定的服务器实例,即使它有一个所有客户端的静态缓存,也可能知道关于客户端C.当然,如果客户端C发出正常的Web请求,它将< em>在获取SessionState时查找有关客户端C的。所以问题是,IF工作在正确/错误的时间被移交给第二个服务器实例(机器B),其中机器B不知道客户端C(除了通过依赖于上下文的SessionState提取,从SignalR无法访问) ,我们如何验证SignalR端的客户端?
它需要的是一些静态的方法来获取所有客户端,或者只是一个静态的&#34; SessionState的上下文(即服务器 - 会话状态)。因为无论哪种方式,我们都可以筛选单个客户端SessionStates并验证&#34;是的,这个客户端在之前的机器上有会话状态&#34;。
除了客户端重新加载页面之外,还有其他方法,以便ASP.NEt可以&#34;缓存&#34;它在本地的信息?这是我到目前为止看到的唯一方式。
答案 0 :(得分:0)
我认为这是“SignalR Backplane”的完美场景,它专为针对Scaleout SignalR的webfarm情况而设计。有很多文章可供搜索。