[英]Losing Session State with ASP.NET/SQL Server
我有一個ASP.NET MVC工作流配置為由負載均衡器管理的兩個網站。 這些網站使用Sql Server作為會話狀態提供程序,並關閉身份驗證(不需要)。
現在,偶爾我似乎失去了會話狀態,我相信這是因為請求由備用服務器處理,因此用戶基本上是從服務器跳到服務器,這取決於負載均衡器看起來如何適合。 我並不總是在工作流的同一階段“失去會話狀態”,所以我認為它與Web場配置+ sql server會話狀態有關。
兩個應用程序使用相同的機器密鑰來加密和解密存儲在sql server中的會話狀態。
兩台服務器上的配置如下:
<authentication mode="None" />
<sessionState mode="SQLServer" sqlConnectionString="{connection-string}" />
<machineKey decryptionKey="777CB456774AF02F7F1AC8570FAF31545B156354D9E2DAAD"
validationKey="89B5B536D5D17B8FE6A53CBB3CA8B8695289BA3DF0B1370BC47D362D375CF91525DDB5307D8A288230DCD4B3931D23AED4E223955C45CFF2AF66BCC422EC7ECD" />
我已經確認兩台服務器上都是一樣的,有什么我遺漏的嗎?
當我使用單個服務器時,在我的開發環境中不會發生這種情況。
我擔心我會受到星期五藍調的影響,毫無疑問下周會找到答案,遺憾的是我不想等!
有任何想法嗎?
發現了這個問題。
當您創建希望使用Sql Server共享會話狀態的應用程序時,它們需要在IIS中配置相同的ID。 這是因為生成的會話ID是基於應用程序ID生成的。 (內部應用程序ID類似於LM / W3SVC / 1
這兩台服務器對IIS中的每個應用程序都有不同的ID。 解決方案是更改每台服務器上“管理網站 - >高級設置”下的ID。
查看計算機密鑰元素上的IsolateApps修飾符 - http://msdn.microsoft.com/en-us/library/w8h3skw9%28v=vs.100%29.aspx
你最近從3.5升級到4.0了嗎?
最后一種方法 - 在兩台機器上回收appPools,然后重新啟動IIS。
會話具有(Web)應用程序范圍。 看看這個MS KB是否有幫助。
更新:有趣的投票。 也許我的建議需要更清晰。
除了匹配機器密鑰之外, 還必須匹配站點的IIS配置(因此它是IIS中的“相同應用程序”(應用程序路徑) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.