2009-02-24 20 views
2

OnSessionStart/Session_Start事件是否仍然只在服務器場環境中觸發一次(總計),或者由於請求由多個服務器處理,它是否可以每個服務器啓動一次?Session_Start()如何在服務器場中工作?

ASP.NET/IIS6或7

應該假定服務器使用粘性會話是。

回答

5

對於默認安裝的IIS,答案是「否」 - Session_Start通常會多次觸發。客戶端將在它命中的每個不同服務器上創建一個新的會話。如果您在IIS中使用Web Garden選項,則會發生同樣的情況。

如果您不依賴於Session並且您擁有服務器場,則通常最好禁用會話狀態。這裏是你如何做到這一點: http://support.microsoft.com/kb/306996

如果你確實取決於會話,你最好的選擇可能是ASP.NET狀態服務器服務。場中的所有服務器都將使用單個服務器來處理會話狀態,並確保Session_Start只觸發一次。對於大量的背景和安裝細節閱讀(查找「狀態服務器模式」以獲得具體說明): http://aspdotnetdevs.blogspot.com/2008/12/aspnet-session-state-and-modes.html

0

我的理解是,一旦請求到達服務器場中的服務器,同一客戶端的所有即將到來的請求都應重定向到服務器場中的同一臺服務器。

+0

只有啓用粘性會話時纔會發生這種情況。 – Rick 2009-02-24 21:22:12

1

在服務器場中,您將使用Sql Server或狀態服務器來管理服務器場中所有服務器的會話狀態。它使這個單一的服務器關注你的狀態,而不是確保OnSessionStart只應該在每個會話中被調用一次,並且不需要總是將所有的請求都返回到同一個服務器。

使用單個服務器維護會話狀態的主要缺點是您不再有OnSessionEnd事件。

4

除托馬斯:它取決於您的會話狀態設置。

在web.config中

<sessionState mode="" >

如果使用mode="InProc"你會得到每個訪問服務器的多個Session和SessionStart事件,1。

在其他模式(StateServer或SqlServer)中,您將獲得1個會話和1個SessionStart。你將而不是得到一個SessionEnd事件。

相關問題