asp.net網站之狀態服務

來源:互聯網
上載者:User

曾經在一家電信小公司工作的時候遇到一個技術問題,當時為了做負載平衡,決定把一套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映射即可。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.