2011-02-15 106 views
0

我有一個網絡服務器,而且我的團隊已將Web應用程序的應用程序池設置爲3,以實現靜音和性能。但是,我們偶然發現部分應用程序未完全正常工作的問題。會話狀態和應用程序池

我們認爲問題出在應用程序的這部分使用會話的地方,我們認爲當數據回發時它不會鏈接回正確的工作進程。

但是,我不確定這一點,或者我是否應該在web.config中使用SessionState。如果我是對的,模式應該是InProc,SessionState還是其他?會話中是否有超時?

有人可以請教我嗎?

回答

0

因此,您已將應用程序分成三部分放在同一臺服務器上,每臺服務器都在IIS自己的應用程序池下運行?我會挑戰背後的假設,但那不是你的問題。

我不認爲你可以做到這一點,並使用開箱即用的工具共享會話狀態。它使用站點(元數據庫)路徑作爲會話狀態「密鑰」的一部分,因此來自不同站點的會話不會發生衝突。

但是,如果你能做到這一點,你需要使用out-of-proc sessionState模式之一(StateServer或SQLServer)。

我還沒有試過以下,但他們可能會幫助你。

以下是Code Project article的鏈接,該鏈接描述了將SQL Server會話更改爲組網站和共享會話。

以下是指向ASP 101 article的鏈接,它描述了與子站點共享會話的一種方式。不知道這是否適用於您的情況與不同的應用程序池。

編輯:

啊,一個網絡花園。是的,您的工作進程不共享InProc會話數據。您需要使用外部提供商。 StateServer工作正常。您需要在服務器上啓用ASP.NET狀態服務並更新您的web.config以使用它。有一些事情要考慮它:

  • 它是否運行在不同的服務器上 比IIS?需要啓用遠程 連接。
  • 你有多個網絡 服務器?需要定義一臺機器 鍵。
  • 您是否在 會話中存儲對象?需要將它們標記爲 可序列化。

網上有很多資源可以幫助解決這個問題,這裏是一個例子blog post

+0

不完全。這部分應用程序有自己的web.config,因爲應用程序的每個部分都是在Visual Studio 2010中的解決方案中構建爲項目。在IIS上,我們爲此應用程序提供了自己的網站和應用程序池,並在應用程序池中爲其提供了它3個asp.net工作進程或Web遠程訪問。如果應用程序池被設置爲默認值,那麼它很好,並按預期工作,將其設置爲3 - 它不會。我不認爲使用SQL Server是可能的,因爲我們使用的數據庫是Oracle。 – Andy5 2011-02-15 23:09:26

0

您不能以多線程方式(應用程序池中的3個線程)使用InProc,而不能保證每個請求都轉到同一個線程。

InProc字面上意味着在進行中,如在當前線程的內存中。

如果您轉移到另一種存儲方法,即對數據庫,則可以在給定應用程序的所有實例之間共享會話。

我建議閱讀this

+0

這可以通過Oracle數據庫工作嗎?如果有,有一個例子嗎? – Andy5 2011-02-16 09:26:33

相關問題