簡體   English   中英

使用ASP.NET / SQL Server丟失會話狀態

[英]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。

在此輸入圖像描述

  1. 使用IIS管理器,在根級別和網站級別上仔細檢查您的計算機密鑰設置。

在此輸入圖像描述

  1. 查看計算機密鑰元素上的IsolateApps修飾符 - http://msdn.microsoft.com/en-us/library/w8h3skw9%28v=vs.100%29.aspx

  2. 你最近從3.5升級到4.0了嗎?

  3. 最后一種方法 - 在兩台機器上回收appPools,然后重新啟動IIS。

會話具有(Web)應用程序范圍。 看看這個MS KB是否有幫助。

更新:有趣的投票。 也許我的建議需要更清晰。

除了匹配機器密鑰之外, 必須匹配站點的IIS配置(因此它是IIS中的“相同應用程序”(應用程序路徑)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM