2012-03-05 47 views
0

簡而言之,我在Web服務器場中有三臺服務器,其中一臺配置爲狀態服務器。兩臺服務器(包括狀態服務器)正確地共享會話狀態,但另一臺服務器仍然保持它自己的會話。使用Web服務器中的狀態服務器的三個丟失會話中的一個服務器

這裏是我做了什麼:

我已經修改了web.config.comments文件中的所有三臺服務器上,使它們具有相同的machineKey條目。

在狀態服務器上,我已將AllowRemoteConnections註冊表項更改爲1.然後,將ASP.Net狀態服務設置爲自動啓動並將其打開。

網站在所有三臺服務器上配置,並且根站點在IIS中共享相同的Identifer。每種配置都是相同的。網站本身包含在網絡共享中,因此所有三臺服務器都使用相同的web.config文件。我將web.config中的sessionState條目更改爲指向Web3。

因此,Web2和Web3能夠設置/修改/銷燬同一會話,但Web1仍在運行它自己的會話。

在谷歌搜索幾個小時後,我陷入了困境,所以任何幫助都非常感謝。

此應用程序在根站點中配置了幾個子目錄。這個級別是否有單獨的AppID?如果是這樣,我怎麼找到它?

感謝, 亞倫

+0

您是否更改了web.config.comments或web.config?你在64位服務器上嗎? – Schwarzie2478 2012-03-14 15:20:10

回答

0

matthewk的答案實際上證明幾乎是正確的答案。一年多後,我回到了這裏,找到了答案。雖然可能是正確的,但我覺得如果上面的答案更具體,我會解決這個問題!

我通過MetaBase搜索。xml文件(C:\ WINDOWS \ system32 \ inetsrv)。

<IIsWebVirtualDir Location ="/LM/W3SVC/103071637/root" 
    AccessFlags="AccessRead | AccessScript" 
    AppFriendlyName="Default Application" 
    AppIsolated="2" 
    AppRoot="/LM/W3SVC/103071637/Root" 
... 

具體而言,服務器1對爲approot(而不是位置)有一個適當的情況下「根」,而服務器的2:發現我注意到,有以下行略有區別的差異的比賽結束後和3個「根」都在帽中。我更新了服務器1以匹配並重新啓動IIS,它可以工作。

即。

AppRoot="/LM/W3SVC/103071637/Root" 
AppRoot="/LM/W3SVC/103071637/ROOT" 
2

http://support.microsoft.com/kb/325056

爲了維護Web場中的不同Web服務器會話狀態,該網站的應用程序路徑(例如,\ LM \ W3SVC \ 2)在Microsoft Internet Information Services(IIS)元數據庫中,對於Web場中的所有Web服務器都必須相同。案例也需要相同,因爲應用程序路徑區分大小寫。

在一個Web服務器上,承載ASP.NET應用程序的網站的實例ID可能爲2(其中應用程序路徑爲\ LM \ W3SVC \ 2)。在另一臺Web服務器上,網站的實例ID可能爲3(應用程序路徑爲\ LM \ W3SVC \ 3)。因此,Web場中Web服務器之間的應用程序路徑是不同的。有關如何檢查Web站點的應用程序路徑,單擊下面的文章編號,以查看Microsoft知識庫中相應的文章:

240225 Description of Adsutil and MetaEdit Used to Modify the Metabase

+0

我已經檢查了所有三臺服務器上的應用程序路徑,並且它們都完全匹配,包括區分大小寫。自從我現在休假以來,我無法再複查。如果這證明是正確的答案,我會重做賞金。 – aaroncatlin 2012-03-15 06:38:41

0

這是不是真的回答你的問題,但根據我的經驗,ASP.NET會話狀態服務不是您應該擴展到多個服務器的東西。它表現不佳(特別是在負載下)並且很難配置。我發現像memcached這樣的分佈式緩存更簡單快捷。

看一看this project

+0

謝謝,我會看看這個。 – aaroncatlin 2012-03-15 06:39:20