曾經在一家電信小公司工作的時候遇到一個技術問題,當時為了做負載平衡,決定把一套asp.net應用裝到兩台伺服器上,於是專案經理和移動的技術人員討論如此部署會遇到的問題,就想到了使用者狀態的問題,比如一個使用者登入的時候進的是A伺服器,在上面記錄了身份憑證,如session,但可能再點一個頁面的時候卻訪問到B伺服器上去了,這時候系統是否會要求使用者重新登入呢?當時已經有十年工作經曆的專案經理兼技術總監犯愁了,最終網站還是在一台機子,而多媒體訊息和簡訊應用分成兩台機子部署,這個問題也不了了之。
如今想來,可以通過簡單的配置一下就可以解決此問題了。
web.config關於sessionState節點的配置方案,sessionState有四種模式:off,inProc,StateServer,SqlServer。
其中的StateServer會話管理員模式配置如下
將mode屬性設為StateServer,也就是將會話資料存放區到單獨的記憶體緩衝區中,再由單獨一台機器上運行
的Windows服務來控制這個緩衝區。狀態服務全稱是“ASP.NET State Service ”(aspnet_state.exe),電腦管理-服務 裡面即可看到此服務,啟動該服務j
它由Web.config檔案中的stateConnectionString屬性來配置。該屬性指定了服務所在的伺服器,以及要監
視的連接埠:
<sessionState mode="StateServer"
stateConnectionString="tcpip=myserver:42424"
cookieless="false" timeout="20" />
在這個例子中,狀態服務在一台名為myserver的機器的42424連接埠(預設連接埠)運行。要在伺服器上改變
連接埠,可編輯HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters登錄機碼中的Port值。
顯然,使用狀態服務的優點在於進程隔離,並可在Web farm(網站群)中共用。 使用這種模式,工作階段狀態的儲存將不
依賴於iis進程的失敗或者重啟,然而,一旦狀態服務中止,所有會話資料都會丟失。換言之,狀態服務不
像SQL Server那樣能持久儲存資料;它只是將資料存放區在記憶體中。
解決之前問題的方法很簡單:
1. 狀態服務可以開在第三台機子C上,此伺服器專門存放使用者上傳檔案,狀態,日誌等。
2. 修改C機子上的註冊表,將
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters
中的AllowRemoteConnection設定成1,還可以改連接埠,將Port設定你想要的值即可,此值預設42424。
3. 配置A,B應用伺服器上網站的web.config中狀態配置項如下:
<sessionState mode="StateServer"
stateConnectionString="tcpip=C伺服器的IP:42424"
cookieless="false" timeout="20" />
然後在TNS伺服器上添加網站網域名稱和A,B伺服器的IP映射即可。
web.config關於sessionState節點的配置方案,sessionState有四種模式:off,inProc,StateServer,SqlServer。
其中的StateServer會話管理員模式配置如下
將mode屬性設為StateServer,也就是將會話資料存放區到單獨的記憶體緩衝區中,再由單獨一台機器上運行
的Windows服務來控制這個緩衝區。狀態服務全稱是“ASP.NET State Service ”(aspnet_state.exe),電腦管理-服務 裡面即可看到此服務,啟動該服務j
它由Web.config檔案中的stateConnectionString屬性來配置。該屬性指定了服務所在的伺服器,以及要監
視的連接埠:
<sessionState mode="StateServer"
stateConnectionString="tcpip=myserver:42424"
cookieless="false" timeout="20" />
在這個例子中,狀態服務在一台名為myserver的機器的42424連接埠(預設連接埠)運行。要在伺服器上改變
連接埠,可編輯HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters登錄機碼中的Port值。
顯然,使用狀態服務的優點在於進程隔離,並可在Web farm(網站群)中共用。 使用這種模式,工作階段狀態的儲存將不
依賴於iis進程的失敗或者重啟,然而,一旦狀態服務中止,所有會話資料都會丟失。換言之,狀態服務不
像SQL Server那樣能持久儲存資料;它只是將資料存放區在記憶體中。
解決之前問題的方法很簡單:
1. 狀態服務可以開在第三台機子C上,此伺服器專門存放使用者上傳檔案,狀態,日誌等。
2. 修改C機子上的註冊表,將
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters
中的AllowRemoteConnection設定成1,還可以改連接埠,將Port設定你想要的值即可,此值預設42424。
3. 配置A,B應用伺服器上網站的web.config中狀態配置項如下:
<sessionState mode="StateServer"
stateConnectionString="tcpip=C伺服器的IP:42424"
cookieless="false" timeout="20" />
然後在TNS伺服器上添加網站網域名稱和A,B伺服器的IP映射即可。