我們所擁有的是一個ASP.NET Web應用程序也做了一些signalR通知。由於SignalR無法訪問ASP.NET會話狀態,因此我們需要其他方式來驗證它們是否是登錄到Web應用程序的客戶端。訪問所有正在進行的ASP.NET會話狀態
在大多數情況下,你可能會認爲一個靜態字典會有所幫助。只要其中一個ASP.NET控制器確保保留關鍵客戶端信息的緩存(通過IP /瀏覽器信息或某些生成的令牌,客戶端稍後發送到signalR) - 只要完成此操作,SignalR可以在將其添加到其池之前驗證客戶端連接。
但是我們正在服務器場的情況下工作,其中SessionState由SQL支持。這意味着,給定服務器實例,即使它有它的所有客戶端的靜態緩存,可能不知道約客戶C.當然,如果客戶機C做了一個正常的網絡請求,它會找出有關客戶端C當它獲取SessionState時。所以問題是,如果機器B不知道客戶端C(除了通過取決於上下文的SessionState獲取,從SignalR無法訪問),那麼IF工作被交給第二個服務器實例(機器B)如何驗證SignalR端的客戶端?
所有它需要是獲取所有客戶端,或簡稱「靜態」上下文SessionState的一些靜態的方式(即服務器會話狀態)。因爲無論哪種方式,我們都可以篩選單個客戶端的SessionStates並驗證「是的,該客戶端在前一臺機器上有會話狀態」。
是否有任何其他方式比客戶端重新加載頁面,使ASP.NEt可以在本地「緩存起來」的信息?這是我迄今爲止唯一的方式。