中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

如何理解IIS 7的兩種應(yīng)用程序池的管道模式(Managed Pipeline Mode)

  之前我寫過(guò)一篇博客文章,講的是.NET 4.0的應(yīng)用程序部署問(wèn)題。有網(wǎng)友問(wèn)到一個(gè)相關(guān)問(wèn)題就是:如何理解IIS 7中的應(yīng)用程序池的管道模式,尤其是如何理解托管模型(integrated mode),今天特意再寫一篇文章來(lái)介紹這個(gè)問(wèn)題。

  IIS 7是微軟最新版本的IIS版本,從Vista開始提供,目前在Vista,Windows 7,Windows Server 2008中提供。這個(gè)全新的版本中,一個(gè)突出的亮點(diǎn)就是,它提供了兩種管道模式,來(lái)支持不同的應(yīng)用程序場(chǎng)景。

  這里提到的管道模式,指的是應(yīng)用程序池(Application Pool)的一個(gè)屬性

image

  上圖中可以看到,這兩種管道模式分別為Integrated(集成)和 Classic(經(jīng)典)

  那么,到底如何理解這兩種模式呢?

  Classic模式:指的是與IIS 6或者之前版本保持兼容的一種模式,一個(gè)典型問(wèn)題就是,在處理ASP.NET這種動(dòng)態(tài)網(wǎng)站的時(shí)候,它是通過(guò)一個(gè)所謂的ISAPI程序,作為插件的方式來(lái)工作的。針對(duì)不同的動(dòng)態(tài)應(yīng)用程序(例如ASP,php等),會(huì)需要不同的ISAPI。

  例如,下面就是一個(gè)注冊(cè)號(hào)的ISAPI映射

image

  從上圖可以看出,不同的Request, 指定了不同的ISAPI程序。下圖是對(duì)于這種Pipeline的一個(gè)圖形化說(shuō)明

iis 6 pipelines

  Integrated模式:這種全新的模式,允許我們將ASP.NET更好地與IIS集成,甚至允許我們?cè)?a href=/itjie/ASPjishu/ target=_blank class=infotextkey>ASP.NET中編寫一些功能(例如Module)來(lái)改變IIS的行為(擴(kuò)展)。集成的好處是,不再通過(guò)ISAPI的方式,提高了速度和穩(wěn)定性。至于擴(kuò)展,則可以使得我們對(duì)于IIS,以及其他類型的請(qǐng)求有更多的控制。(例如,我們希望靜態(tài)網(wǎng)頁(yè)也具備一些特殊的行為)

  下圖解釋了這一點(diǎn)。

iis 7 integrated mode

  以上兩個(gè)圖片來(lái)自與下面這個(gè)文章,并且該文章有更詳細(xì)的一些理論介紹。

  http://learn.iis.NET/page.ASPx/243/ASPNET-integration-with-iis-7/

  下面,我就通過(guò)一個(gè)例子,來(lái)幫助大家更好地了解集成模型。

  這個(gè)例子里面,我有一個(gè)特殊的需求就是,我希望對(duì)網(wǎng)站里面所有請(qǐng)求做一個(gè)日志監(jiān)控,不管是動(dòng)態(tài)網(wǎng)頁(yè),還是靜態(tài)網(wǎng)頁(yè)。

  1. 創(chuàng)建一個(gè)Web Application

image

  2. 添加一個(gè)HttpModule

  為了對(duì)用戶請(qǐng)求進(jìn)行監(jiān)控,我們一般會(huì)編寫一個(gè)HttpModule。

image

image

  我為該模塊實(shí)現(xiàn)簡(jiǎn)單的功能(將用戶的請(qǐng)求地址打印出來(lái)在頁(yè)面上):

using System;using System.Web;namespace WebApplication2{    public class MyModule1 : IHttpModule    {        /// <summary>        /// You will need to configure this module in the web.config file of your        /// web and register it with IIS before being able to use it. For more information        /// see the following link: http://go.microsoft.com/?linkid=8101007        /// </summary>        #region IHttpModule Members        public void Dispose()        {            //clean-up code here.        }        public void Init(HttpApplication context)        {            // Below is an example of how you can handle LogRequest event and provide             // custom logging implementation for it            context.LogRequest += new EventHandler(OnLogRequest);        }        #endregion        public void OnLogRequest(Object source, EventArgs e)        {            //custom logging logic can go here            var app = (HttpApplication)source;            app.Response.Write(app.Request.Url.ToString());        }    }}

  3.注冊(cè)該模塊

  模塊是需要注冊(cè)才能夠使用的。我們一般會(huì)想到以前的做法

  <system.web>    <compilation debug="true" targetFramework="4.0" />    <httpModules>      <add name="test" type="WebApplication2.MyModule1,WebApplication2"/>    </httpModules>  </system.web>

  但這樣注冊(cè),會(huì)遇到一個(gè)錯(cuò)誤

image

  這個(gè)錯(cuò)誤的意思是,LogRequest這個(gè)操作,是必須運(yùn)行在集成模式下的。

  那么,到底如何注冊(cè)成集成模式的模塊呢?

  我們需要將配置文件修改成下面這樣

<?xml version="1.0"?><!--  For more information on how to configure your ASP.NET application, please visit  http://go.microsoft.com/fwlink/?LinkId=169433  --><configuration>  <system.web>    <compilation debug="true" targetFramework="4.0" />    <!--<httpModules>      <add name="test" type="WebApplication2.MyModule1,WebApplication2"/>    </httpModules>-->  </system.web>  <system.webServer>    <modules>      <add name="test" type="WebApplication2.MyModule1,WebApplication2"/>    </modules>  </system.webServer></configuration>

  請(qǐng)注意,現(xiàn)在多了一個(gè)system.webServer的節(jié),里面有一個(gè)modules的節(jié),可以配置需要注冊(cè)的一些HttpModule。

  因?yàn)槭亲?cè)為system.webServer的Module,所以,在visual studio中調(diào)試是沒(méi)有效果的。

image

  我們需要將該應(yīng)用程序發(fā)布到IIS,并且設(shè)置為integrated mode。

  4. 發(fā)布到IIS

  有很多辦法進(jìn)行發(fā)布,我所推薦的是用deploy package的方式。

image

  請(qǐng)注意,我們使用的Application Pool是integrated mode的。

image

  發(fā)布之后,我們?cè)跒g覽器中瀏覽首頁(yè),我們會(huì)發(fā)現(xiàn)在底部會(huì)有一個(gè)特殊的輸出,就是我們當(dāng)前請(qǐng)求的地址信息。這說(shuō)明,我們那個(gè)Module已經(jīng)在工作了。

image

  5. 測(cè)試該模塊對(duì)于靜態(tài)頁(yè)面的支持

  如果僅僅是上面這樣,我們似乎看不出這種模式到底有何優(yōu)勢(shì)。我們以前不也是可以實(shí)現(xiàn)這樣的效果嗎?

  請(qǐng)你主要的是,以前的HttpModule只能影響到動(dòng)態(tài)網(wǎng)頁(yè),例如我們的ASPX網(wǎng)頁(yè),而對(duì)于靜態(tài)網(wǎng)頁(yè)(例如html),或者其他類型的動(dòng)態(tài)網(wǎng)頁(yè)(例如php等)是無(wú)能為力的。

  那么,現(xiàn)在這種模式下情況是怎樣的呢?

  我們可以添加一個(gè)簡(jiǎn)單的html頁(yè)面,放在網(wǎng)站根目錄下

image

  然后,我們?nèi)フ?qǐng)求該頁(yè)面

image

  是不是很神奇呢?雖然是靜態(tài)網(wǎng)頁(yè),但因?yàn)槲覀兡莻€(gè)模塊是注冊(cè)在IIS里面的,它改變了IIS的行為,所以仍然會(huì)在頁(yè)面底部插入一段輸出。

  6. 總結(jié)

  希望上面這樣的例子可以幫助大家更好地理解Integrated mode。它是允許我們將代碼插入到IIS內(nèi)核中,而不再通過(guò)ISAPI的方式。這將帶來(lái)更好的性能和擴(kuò)展性。

NET技術(shù)如何理解IIS 7的兩種應(yīng)用程序池的管道模式(Managed Pipeline Mode),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 99久久久国产精品 | 国产成人综合在线 | av资源中文在线天堂 | 色综合色综合色综合 | 一级片免费网站 | 久久亚洲一区二区三区四区 | 看一级毛片视频 | 国产精品日韩欧美一区二区 | 四色永久 | 欧美1区2区 | 国产中文视频 | 视频二区| 久久久www成人免费无遮挡大片 | 中文字幕亚洲精品在线观看 | 韩国av网站在线观看 | 中文字幕一区二区三区不卡在线 | 欧美成人激情 | 国产精品国产精品 | 久久国 | www亚洲精品 | 二区国产| 爱操影视 | 精品欧美黑人一区二区三区 | 精品国产91乱码一区二区三区 | 韩日一区二区 | 国产一区二区三区久久 | 一区在线观看视频 | a亚洲精品 | 天天操综合网站 | 暖暖成人免费视频 | 国产精品自产av一区二区三区 | 精品久久久久久久久久久久久久 | 午夜免费观看网站 | 亚洲欧洲一区二区 | 国产精品视频在线播放 | 黄色一级大片视频 | 综合二区| 在线视频a | 亚洲精品99999 | 欧美色综合一区二区三区 | 久久久精品影院 |