2014-07-09 84 views
2

我對會話狀態模式有基本的瞭解,我已經通過MSDN上的this article但無法理解何時使用InProc,StateServer和SqlServer會話模式?更具體地說,在何時使用狀態服務器什麼時候使用sqlserver?Inproc和Outproc會話狀態模式

+0

我認爲所提到的文章很好地解釋了何時使用每種模式。究竟哪一部分你不明白? – haim770

回答

8

3種不同的模式可以幫助您以不同的方式分散您的狀態,從而使您的應用程序在整個農場中更具可擴展性,並使其在自己的操作中更加健壯。

是InProc
InProc方式是其中的會話都將附加到實際運行它的過程中最基本的會話管理方案。這意味着它具有最快的響應時間,因爲服務器不必去替代源來獲取它所需的數據。雖然技術上最快,但它也是最弱的,因爲它只能在運行網站的服務器上使用。它也容易出現內存轉儲。如果您的網站因任何原因崩潰,會話會隨着流程一起轉儲。對於小而穩定的網站,InProc是完全可以接受的,甚至可能是理想的。 InProc還具有能夠在會話中保存任何內存對象的好處。如果您嘗試持有巨大的物體,這也會產生問題。

的StateServer
的StateServer是指可以駐留在任何特定的機器上的ASP.Net狀態服務器服務。它通常在端口42424上運行,可以爲單臺機器或多臺機器提供服務。它的目的是比SQL服務器狀態管理方法更快,但我認爲速度的差異可以忽略不計。也許在非常大的企業環境中,這種差異變得明顯,但對於我所見過的網絡農場而言卻並非如此。 StateServer要求會話中的任何對象爲Serializable以便正確存儲和傳輸。這意味着不僅可以將任何對象放置在會話中,所以在構建類時您有計劃。狀態服務器可以位於您的網站所在的機器上,也可以位於可通過42424端口訪問的計算機上。這意味着會話數據與IIS進程分離,因此「免疫」崩潰和掛起。這使您可以擁有使用公共狀態服務器的服務器場,並且如果客戶端不需要限制到特定服務器,則負載平衡就會變得簡單。雖然狀態服務器服務相當快速,但它運行在許多網絡管理員認爲是入侵的另一個「攻擊媒介」的端口上。這導致SQL狀態服務器。

SqlServer SqlServer模式的操作與StateServer非常相似。對象必須是序列化的,SQL服務器可以是本地的,也可以是遠程的,因此它不太容易出現服務器場中的單個服務器崩潰。網絡管理員傾向於選擇SQL服務器進行狀態管理,因爲它們可以減少入侵向量。由於你的網站可能需要一個sql服務器來執行數據訪問,這只是小豬的後盾。 Sql服務器還允許你明確地檢查狀態表中的內容。

我的偏好通常是StateServer。啓動和運行起來非常簡單,並且您可以擁有一個通用的,用於許多不相關的環境(re:dev,qa等)的狀態。它不需要實際的維護,而且非常容易設置。它也不需要許可證就像sql server那樣運行。但是,隨着您對分散性和安全性的需求增加,sql server變得更加友好。僅將InProc用於流量有限的最基本站點或站點。

+3

StateServer也被稱爲'Outproc' –