最大的網站源碼資源下載站,
win2003 server下的iis6默認設置下對每個運行在默認應用池中的工作者進程都會經過20多個小時后自動回收該進程,造成保存在該進程中的session丟失。
因為session,application等數據默認保存在運行該web應用程序的工作者進程中,如果回收工作者進程,則會造成丟失。
解決辦法:
修改配置,設置為不定時自動回收該工作者進程,比如設置為當超出占用現有物理內存60%后自動回收該進程。通過使用默認應用程序池,可以確保多個應用程序間互相隔離,保證由于一個應用程序的崩潰不會影響另外的web應用程序。還可以使一個獨立的應用程序運行在一個指定的用戶帳號特權之下。
如果使用stateserver方式或者sql server數據庫方式來保存session,則不受該設置的影響。
可能的原因2:
系統要運行在負載平衡的 web 場環境中,而系統配置文件web.config中的session狀態卻設置為inproc(即在本地存儲會話狀態),導至在用戶訪問量大時,session常經超時的情況。引起這個現象的原因主要是因為用戶通過負載平衡ip來訪問web應用系統,某段時候在某臺服務器保存了session的會話狀態,但在其它的web前端服務器中卻沒有保存session的會話狀態,而隨著并發量的增大,負載平衡會當作路由隨時訪問空閑的服務器,結果空閑的服務器并沒有之前保存的session會話狀態。
解決辦法:
1.當您在負載平衡的 web 場環境中運行 asp.net web 應用程序時,一定要使用 sqlserver 或 stateserver 會話狀態模式,在項目中我們基于性能考慮并沒有選擇sqlserver模式來存儲session狀態,而是選擇一臺sessionstateserver 服務器來用戶的session會話狀態。我們要在系統配置文件web.config中設置如下:
<sessionstate mode="stateserver" cookieless="false" timeout="240" stateconnectionstring="tcpip=192.168.0.1:42424" statenetworktimeout="14400" />
還要添加一項
<machinekey validationkey="78ae3850338bfadce59d8ddf58c9e4518e7510149c46142d7aad7f1ad49d95d4" decryptionkey="5fc88dfc24ea123c" validation="sha1"/>
2. 我們同時還要在sessionstateserver 服務器中啟動asp.net state service服務,具體設置:控制面板>>管理工具>>服務>>asp.net state service,把它設為自動啟動即可。
3. 每臺前端web服務的microsoft“internet 信息服務”(iis)設置
要在 web 場中的不同 web 服務器間維護會話狀態,microsoft“internet 信息服務”(iis) 配置數據庫中 web 站點的應用程序路徑(例如,/lm/w3svc/2)與 web 場中所有 web 服務器必須相同。大小寫也必須相同,因為應用程序路徑是區分大小寫的。在一臺 web 服務器上,承載 asp.net 應用程序的 web 站點的實例 id 可能是 2(其中應用程序路徑是 /lm/w3svc/2)。在另一臺 web 服務器上,web 站點的實例 id 可能是 3(其中應用程序路徑是 /lm/w3svc/3)。因此,web 場中的 web 服務器之間的應用程序路徑是不同的。我們必須使web 場web 站點的實例 id 相同即可。你可以在iis中把某一個web配置信息保存為一個文件,其他web 服務器的iis配置可以來自這一個文件。
新聞熱點
疑難解答
圖片精選