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