在 IIS7.5 和 8.0 之間共享 ASP.NET 狀態服務會話不起作用
我有一個由 5 台執行 IIS 7.5 的 Server 2008R2 機器組成的網路場。它們都使用執行 ASP.NET 狀態服務的單個獨立伺服器共享會話狀態(該伺服器也執行 2008 R2)。一切都運轉良好。
但是,我現在添加了第六台伺服器,這台執行 2012/IIS 8.0。在我的一生中,我無法讓這台伺服器與其他伺服器共享會話狀態。
machineKey 配置完全相同(匿名):
<machineKey validationKey="XYZ" decryptionKey="ZYX" validation="SHA1" />
所有伺服器的應用程序 ID 完全相同(我們執行多個網站,但都以程式方式創建了 ID,配置相同,也在執行時驗證):
/LM/W3SVC/10351/ROOT
所有站點也有相同的 AppPath,也在執行時驗證:
D:\SomeSite\SomApp\
會話配置也完全相同:
<sessionState mode="StateServer" partitionResolverType="MyStateServerPartitionResolver" stateNetworkTimeout="30" timeout="20" />
MyStateServerPartitionResolver 類非常簡單,只是抽象了我們通過自己的配置載入連接字元串的事實(connectionString 值在所有伺服器上都是相同的,也經過驗證):
public class MyStateServerPartitionResolver : IPartitionResolver { private string connectionString; public void Initialize() { connectionString = ConfigSettings.StateServerConnectionString; } public string ResolvePartition(object key) { return connectionString; } }
所有站點都在 .NET 4.0 上執行,應用程序池配置也完全相同。
我可以縮小範圍的唯一區別是工作伺服器都執行 IIS 7.5 而非工作伺服器執行 IIS 8.0。但是,我希望這是一個受支持的方案,因為否則很難進行滾動升級。
關於我可以做些什麼來調試這個的任何建議?或者任何確認 IIS 7.5 和 8.0 不能共享會話狀態的文件?
所以這是一個經典的時刻,在這個簡單的問題上盲目地盯著自己看。
雖然所有機器都完全更新並且配置相同,但我錯過了 Server 2012 天生就安裝了 .NET 4.5 的事實。即使您在 IIS 中選擇 v4.0 作為 .NET Framework 版本,它實際上在後台執行的是 4.5。
幸運的是,會話密鑰在 4.0 和 4.5 之間發生了變化,因此當使用者在執行 4.0 和 4.5 的伺服器之間切換時,我們會失去會話。
在所有 2008 R2 伺服器上安裝 .NET 4.5 Framework 已解決此問題。