歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> IIS下ASP.Net應用程序多進程設置及Session共享

IIS下ASP.Net應用程序多進程設置及Session共享

日期:2017/2/28 13:44:19   编辑:Linux教程

背景:

目前項目中在單個進程的應用程序經常會遇到w3c.exe崩潰的情況,於是就設想是否可以通過IIS多進程的方案來避免出現該問題。

  • IIS下Asp.Net應用程序多進程設置:

打開iis管理器,找到"asp.net應用程"使用的“線程池”,右鍵在“屬性”中找到“高級”,修改"最大工作進程數"(默認值為1),修改為32.

這樣,就可以實現最大該asp.net應用程序可以同時啟用32個並行進程。

注意事項:

1、最大並行進程數的值,需要設置一個合理范圍的值。不能過大,可能會造成服務器資源耗盡;需要評估單個進程占用的最大資源數,之後合理的去設置該值;

2、設置了並行多進程後,asp.net應用程序的session在多個進程之間默認是不能實現共享的;

3、合理的去設置資源自動回收時間:合理設置【限制超時】和【回收時間間隔】屬性值。

  • Asp.Net應用程序多進程下實現Session共享:

Asp.Net提供了以下幾種Session保存機制,如表 1所示:

表 1 Session保存方式

方式名稱

存儲方式

性能

Off

設置為不使用Session功能

InProc

設置為將Session存儲在進程內,就是ASP中的存儲方式,這是默認值

最高

StateServer

設置為將Session存儲在獨立的狀態服務中。通常是aspnet_state.exe進程

性能損失10-15%

SQLServer

設置將Session存儲在SQL Server中。

性能損失10-20%

Custom

自定制的存儲方案

由實現方式確定

在Asp.Net程序的web.config配置文件中對Session的保存方式進行設置。如果不顯示指定Session的保存方式,默認使用InProc的方式保存,即Session由提供服務的工作進程保存。

為了提高IIS對高並發的支持,可以增加應用程序池的工作進程數,IIS會根據內置的調度算法,將用戶的請求在多個工作進程間動態分配,如果搭建了服務器集群和負載均衡,則用戶請求會在多台機器的多個工作進程間進行動態分配。在上述情況下,如果Session的保存方式依然為InProc,則用戶請求在多個工作進程間切換時可能出現Session丟失的情況,導致請求失敗或出錯。

為解決上述為,需要將Session的保存方式設置為共享,即表 1中的“StateServer”、“SQLServer”或“Custom”方式。這幾種方法中,“SQLServer”方式需要安裝獨立的SQLServer數據庫,“Custom”方式需要自行實現相應的Session存儲與檢索過程,部署起來相對復雜,相對上述兩種方式,“StateServer”方式在功能性和可實施性上最好,因此下文重點介紹此種Session共享機制。

設置步驟:

1、cmd下運行services.msc打開“服務”窗口,找到“ASP.NET狀態服務”服務項,修改屬性為自動啟動。

2、修改注冊表: [HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/aspnet_state/Parameters]
設置 AllowRemoteConnection = 1 , 設置 Port = 42424 (十進制,默認即為42424)
AllowRemoteConnection ,0僅能本機使用,1可以供其他機器使用.
Port是服務的端口號

3、打開待修改網站主目錄下的web.config配置文件,搜索找到“<sessionstate>”配置節點,如果不存在配置節點,則在“<system.web>”節點下新建“<sessionstate>”配置節點,並將節點屬性修改為:
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="60"/>
其中“tcpip=*”後的主機IP地址和端口可根據實際情況修改。修改完後保存配置文件即可。

注意事項

1、 Session中保存的自定義對象必須顯示標記為可序列化“[serializable]”。如果未顯示標記為可序列化,則在訪問頁面時會報錯。

2、 StateServer服務器必須為Windows Server操作系統,如Windows Server 2003或Windows Server 2008。

Copyright © Linux教程網 All Rights Reserved