Windows-Server-2008-R2

在 IIS7.5 和 8.0 之間共享 ASP.NET 狀態服務會話不起作用

  • October 3, 2013

我有一個由 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 已解決此問題。

引用自:https://serverfault.com/questions/542985