ASP.NET4的自動(dòng)啟動(dòng)特性淺析
自動(dòng)啟動(dòng),先行初始化web應(yīng)用,而不必等待外部客戶(hù)端訪(fǎng)問(wèn)web服務(wù)器時(shí)才啟動(dòng)的能力。這可以有助于你給第一個(gè)訪(fǎng)問(wèn)者提供一個(gè)更快的回復(fù)體驗(yàn),避免撰寫(xiě)定制腳本來(lái)“預(yù)熱(warm up)”服務(wù)器和準(zhǔn)備好任何數(shù)據(jù)緩存。它可用于任何類(lèi)型的ASP.NET應(yīng)用,包括基于A(yíng)SP.NET Web Forms和ASP.NET MVC的應(yīng)用。
在A(yíng)SP.NET 4中自動(dòng)啟動(dòng)Web應(yīng)用
有些web應(yīng)用在可以處理用戶(hù)訪(fǎng)問(wèn)之前,需要裝載很多的數(shù)據(jù),或做一些花費(fèi)很大的初始化處理。今天使用 ASP.NET 的開(kāi)發(fā)人員經(jīng)常使用應(yīng)用的Global.asax 文件中的 “Application_Start”事件處理函數(shù)來(lái)做這些工作(該事件是在第一個(gè)請(qǐng)求執(zhí)行時(shí)觸發(fā)的)。他們要么設(shè)計(jì)定制腳本,周期性地向應(yīng)用發(fā)假的請(qǐng)求,來(lái)“喚醒它(wake it up)”,從而在客戶(hù)訪(fǎng)問(wèn)之前執(zhí)行這個(gè)代碼,或者就讓那不幸的第一個(gè)訪(fǎng)問(wèn)者等著這個(gè)邏輯執(zhí)行完才處理其請(qǐng)求(這可以給這些用戶(hù)造成很長(zhǎng)的耽擱)。
ASP.NET 4中有一個(gè)叫“自動(dòng)啟動(dòng)(auto-start)”的新特性,可以較好地解決這個(gè)場(chǎng)景, 可以在IIS 7.5(隨Windows 7和Windows Server 2008 R2發(fā)布)上運(yùn)行 ASP.NET 4時(shí)使用。這個(gè)自動(dòng)啟動(dòng)特性提供了一個(gè)可控制的方式來(lái)啟動(dòng)一個(gè)應(yīng)用工作進(jìn)程,初始化ASP.NET 應(yīng)用,然后接受HTTP請(qǐng)求。
將一個(gè)ASP.NET 4應(yīng)用配置成自動(dòng)啟動(dòng)
要使用ASP.NET 4自動(dòng)啟動(dòng)特性,你首先配置IIS應(yīng)用池工作進(jìn)程,使在其中運(yùn)行的應(yīng)用在web服務(wù)器最先裝載時(shí)即自動(dòng)啟動(dòng)。配置方法是,打開(kāi)IIS 7.5的applicationHost.config文件(C:\Windows\System32\inetsrv\config\applicationHost.config),在合適的< applicationPools>中加一個(gè) startMode=”AlwaysRunning”屬性:
< applicationPools> < add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" /> < /applicationPools>
如果你運(yùn)行Windows任務(wù)管理器,點(diǎn)擊“顯示所有用戶(hù)的進(jìn)程”復(fù)選框,然后把a(bǔ)pplicationHost.config文件的startMode屬性改動(dòng)保存的話(huà),在文件保存后的瞬間就會(huì)看到一個(gè)新的“w3wp.exe” 工作進(jìn)程啟動(dòng)起來(lái)了。
一個(gè)單一IIS應(yīng)用池工作進(jìn)程可以宿主多個(gè)ASP.NET 應(yīng)用,你可以通過(guò)在對(duì)應(yīng)應(yīng)用的 < application> 中加一個(gè)serviceAutoStartEnabled="true" 屬性,來(lái)指定在工作進(jìn)程裝載時(shí)你想要哪些應(yīng)用自動(dòng)啟動(dòng)起來(lái):
< sites>
< site name="MySite" id="1">
< application path="/" serviceAutoStartEnabled="true" serviceAutoStartProvider="PreWarmMyCache" />
< /site>
< /sites>
< serviceAutoStartProviders>
< add name="PreWarmMyCache" type="PreWarmCache, MyAssembly" />
< /serviceAutoStartProviders>
上面的serviceAutoProvider="PreWarmMyCache" 屬性引用了config文件中的一個(gè)提供器(provider)配置,允許你配置一個(gè)自定義的類(lèi),該類(lèi)用于封裝應(yīng)用的任何 "預(yù)熱(warming up)" 邏輯。這個(gè)類(lèi)會(huì)在工作進(jìn)程和應(yīng)用預(yù)載時(shí)(在收到任何外部web請(qǐng)求之前)自動(dòng)被調(diào)用,可用于執(zhí)行想要在接受和處理請(qǐng)求之前執(zhí)行的任何初始化或緩存裝載邏輯:
public class PreWarmCache : System.Web.Hosting.IProcessHostPreloadClient {
public void Preload(string[] parameters) {
// Perform initialization and cache loading logic here...
}
}
IIS會(huì)將應(yīng)用啟動(dòng)到這樣一個(gè)狀態(tài),在這個(gè)狀態(tài)中,它不能接受請(qǐng)求,直到你的 "預(yù)熱(warming up)" 邏輯完成為止。在Preload方法中的初始化代碼運(yùn)行完返回之后,ASP.NET 應(yīng)用會(huì)被標(biāo)記為可處理請(qǐng)求了。
你也可以把新的自動(dòng)啟動(dòng)"warming up"特性與IIS7 應(yīng)用請(qǐng)求導(dǎo)向(Application Request Routing, ARR) 擴(kuò)展的負(fù)載平衡功能結(jié)合起來(lái),用它來(lái)在應(yīng)用完成初始化,可以接受HTTP請(qǐng)求之后,向負(fù)載平衡器發(fā)信號(hào),在這個(gè)時(shí)候,服務(wù)器可以放入web farm來(lái)處理請(qǐng)求。
結(jié)束語(yǔ)
ASP.NET 4 和 IIS 7.5的自動(dòng)啟動(dòng)新特性提供了一個(gè)定義明確的方式,允許你在任何終端用戶(hù)訪(fǎng)問(wèn)你的應(yīng)用之前,運(yùn)行花費(fèi)大的應(yīng)用啟動(dòng)和預(yù)緩存邏輯,這允許你一開(kāi)始就將應(yīng)用“預(yù)熱(warmed up)”好,提供一個(gè)始終如一的高性能體驗(yàn)。
希望本文對(duì)你有所幫助,對(duì)自動(dòng)啟動(dòng)特性有更深入的了解。
- ASP.Net防止刷新自動(dòng)觸發(fā)事件的解決方案
- asp.net下用js實(shí)現(xiàn)鼠標(biāo)移至小圖,自動(dòng)顯示相應(yīng)大圖
- asp.net 網(wǎng)頁(yè)編碼自動(dòng)識(shí)別代碼
- asp.net HttpWebRequest自動(dòng)識(shí)別網(wǎng)頁(yè)編碼
- asp.net通過(guò)HttpModule自動(dòng)在Url地址上添加參數(shù)
- asp.net下使用jQuery.AutoComplete完成仿淘寶商品搜索自動(dòng)完成功能(改進(jìn)了鍵盤(pán)上下選擇體驗(yàn))
- jQuery 插件autocomplete自動(dòng)完成應(yīng)用(自動(dòng)補(bǔ)全)(asp.net后臺(tái))
- Asp.net控制Tomcat啟動(dòng)關(guān)閉的實(shí)現(xiàn)方法
- ASP.NET GridView中文本內(nèi)容無(wú)法換行(自動(dòng)換行/正常換行)
- asp.net中倒計(jì)時(shí)自動(dòng)跳轉(zhuǎn)頁(yè)面的實(shí)現(xiàn)方法(使用javascript)
- Asp.Net(C#)自動(dòng)執(zhí)行計(jì)劃任務(wù)的程序?qū)嵗治龇窒?/a>
- asp.net在事件中啟動(dòng)線(xiàn)程來(lái)打開(kāi)一個(gè)頁(yè)面的實(shí)現(xiàn)方法
- asp.net利用cookie保存用戶(hù)密碼實(shí)現(xiàn)自動(dòng)登錄的方法
相關(guān)文章
使用.NET Core創(chuàng)建exe應(yīng)用程序
這篇文章介紹了使用.NET Core創(chuàng)建exe應(yīng)用程序的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
使用.NET存儲(chǔ)XML數(shù)據(jù)的方法
使用.NET存儲(chǔ)XML數(shù)據(jù)的方法...2007-04-04
使用asp.net的pageDataSource中時(shí)索引問(wèn)題解決方法
當(dāng)前頁(yè)面在數(shù)據(jù)的除第一頁(yè)的任何一個(gè)頁(yè)面時(shí),重新條件查詢(xún)并且是新條件的總頁(yè)數(shù)小于剛才查詢(xún)得到的頁(yè)碼時(shí),就會(huì)出現(xiàn)“索引 20 不是為負(fù)數(shù),就是大于行數(shù)”的類(lèi)似的錯(cuò)誤2013-04-04
asp.net jquery無(wú)刷新分頁(yè)插件(jquery.pagination.js)
采用Jquery無(wú)刷新分頁(yè)插件jquery.pagination.js 實(shí)現(xiàn)無(wú)刷新分頁(yè)效果:本示例Handler中采用StringBuilder的append方法追加HTML,小數(shù)據(jù)量可以,但是大數(shù)據(jù)或是布局常變,建議返回JSON格式的數(shù)據(jù),性能和靈活性更好,望使用者好好把握2013-01-01
.NET Core3.0創(chuàng)建Worker Services的實(shí)現(xiàn)
這篇文章主要介紹了.NET Core3.0創(chuàng)建Worker Services的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
ASP.NET MVC學(xué)習(xí)之NuGet在VS中的運(yùn)用淺談
這篇文章主要給大家介紹了關(guān)于A(yíng)SP.NET MVC學(xué)習(xí)之NuGet在VS中運(yùn)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
ASP.NET下對(duì)cookies的操作實(shí)現(xiàn)代碼
ASP.NET下對(duì)cookies的操作實(shí)現(xiàn)代碼,需要的朋友可以參考下。2011-10-10
ASP.NET中配合JS實(shí)現(xiàn)頁(yè)面計(jì)時(shí)(定時(shí))自動(dòng)跳轉(zhuǎn)
這篇文章主要介紹了ASP.NET中配合JS實(shí)現(xiàn)頁(yè)面計(jì)時(shí)(定時(shí))自動(dòng)跳轉(zhuǎn),本文主要依靠JS實(shí)現(xiàn)需求,只是在A(yíng)SP.NET中實(shí)現(xiàn)而已,需要的朋友可以參考下2015-06-06
ASP.NET MVC 從IHttp到頁(yè)面輸出的實(shí)例代碼
MVCHandler應(yīng)該算是MVC真正開(kāi)始的地方。MVCHandler實(shí)現(xiàn)了IHttpHandler接口,ProcessRequest便是方法入口2013-09-09

