ASP.NET和IIS服務(wù)器 7.0之集成
在早期的IIS服務(wù)器版本中,開發(fā)人員需要編寫ISAPI擴(kuò)展/過(guò)濾器來(lái)擴(kuò)展服務(wù)器的功能。除了寫起來(lái)非常痛苦外,ISAPI在如何接入服務(wù)器以及允許開發(fā)人員定制方面也是非常有限。
例如,你無(wú)法在ISAPI擴(kuò)展中實(shí)現(xiàn)URL重寫代碼(注:ASP.NET是以ISAPI擴(kuò)展的方式實(shí)現(xiàn)的)。假如你把運(yùn)行時(shí)間長(zhǎng)的代碼編寫成ISAPI過(guò)濾器的話,結(jié)果是你將占用web服務(wù)器的I/O線程(這就是我們不讓托管代碼在請(qǐng)求的過(guò)濾器執(zhí)行階段運(yùn)行的原因)。
我們?cè)贗IS服務(wù)器7中對(duì)核心IIS服務(wù)器處理引擎做的一個(gè)重大的架構(gòu)級(jí)變動(dòng)是通過(guò)一個(gè)新的模塊化的請(qǐng)求管道架構(gòu)來(lái)促成極其豐富的擴(kuò)展性。
你現(xiàn)在可以通過(guò)與web服務(wù)器注冊(cè)一個(gè)HTTP擴(kuò)展性模塊(HTTP Extensibility Module),在任意一個(gè)HTTP請(qǐng)求的生命周期的任何地方編寫代碼。這些擴(kuò)展性模塊可以使用native的C++代碼或.NET托管代碼來(lái)編寫(你可以使用現(xiàn)有的ASP.NET System.Web.IHttpModule接口來(lái)實(shí)現(xiàn))。
所有“內(nèi)置”的IIS服務(wù)器7功能(認(rèn)證,授權(quán),靜態(tài)文件供應(yīng),目錄清單支持,經(jīng)典的ASP,記錄日志等),現(xiàn)在都是使用這個(gè)公開的模塊化的管道API來(lái)實(shí)現(xiàn)的。這意味著你可以除去這些IIS服務(wù)器S7“內(nèi)置”功能的任意一個(gè),而以你自己的實(shí)現(xiàn)來(lái)替換/擴(kuò)展這些功能。
IIS服務(wù)器7.0上的ASP.NET本身也從以ISAPI的實(shí)現(xiàn)形式變成直接接入IIS服務(wù)器7管道的模塊。
【編輯推薦】