天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

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

  IIS 7是微軟最新版本的IIS版本,從Vista開始提供,目前在Vista,Windows 7,Windows Server 2008中提供。這個全新的版本中,一個突出的亮點就是,它提供了兩種管道模式,來支持不同的應用程序場景。

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

image

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

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

  Classic模式:指的是與IIS 6或者之前版本保持兼容的一種模式,一個典型問題就是,在處理ASP.NET這種動態網站的時候,它是通過一個所謂的ISAPI程序,作為插件的方式來工作的。針對不同的動態應用程序(例如ASP,php等),會需要不同的ISAPI。

  例如,下面就是一個注冊號的ISAPI映射

image

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

iis 6 pipelines

  Integrated模式:這種全新的模式,允許我們將ASP.NET更好地與IIS集成,甚至允許我們在ASP.NET中編寫一些功能(例如Module)來改變IIS的行為(擴展)。集成的好處是,不再通過ISAPI的方式,提高了速度和穩定性。至于擴展,則可以使得我們對于IIS,以及其他類型的請求有更多的控制。(例如,我們希望靜態網頁也具備一些特殊的行為)

  下圖解釋了這一點。

iis 7 integrated mode

  以上兩個圖片來自與下面這個文章,并且該文章有更詳細的一些理論介紹。

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

  下面,我就通過一個例子,來幫助大家更好地了解集成模型。

  這個例子里面,我有一個特殊的需求就是,我希望對網站里面所有請求做一個日志監控,不管是動態網頁,還是靜態網頁。

  1. 創建一個Web Application

image

  2. 添加一個HttpModule

  為了對用戶請求進行監控,我們一般會編寫一個HttpModule。

image

image

  我為該模塊實現簡單的功能(將用戶的請求地址打印出來在頁面上):

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.注冊該模塊

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

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

  但這樣注冊,會遇到一個錯誤

image

  這個錯誤的意思是,LogRequest這個操作,是必須運行在集成模式下的。

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

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

<?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>

  請注意,現在多了一個system.webServer的節,里面有一個modules的節,可以配置需要注冊的一些HttpModule。

  因為是注冊為system.webServer的Module,所以,在visual studio中調試是沒有效果的。

image

  我們需要將該應用程序發布到IIS,并且設置為integrated mode。

  4. 發布到IIS

  有很多辦法進行發布,我所推薦的是用deploy package的方式。

image

  請注意,我們使用的Application Pool是integrated mode的。

image

  發布之后,我們在瀏覽器中瀏覽首頁,我們會發現在底部會有一個特殊的輸出,就是我們當前請求的地址信息。這說明,我們那個Module已經在工作了。

image

  5. 測試該模塊對于靜態頁面的支持

  如果僅僅是上面這樣,我們似乎看不出這種模式到底有何優勢。我們以前不也是可以實現這樣的效果嗎?

  請你主要的是,以前的HttpModule只能影響到動態網頁,例如我們的ASPX網頁,而對于靜態網頁(例如html),或者其他類型的動態網頁(例如php等)是無能為力的。

  那么,現在這種模式下情況是怎樣的呢?

  我們可以添加一個簡單的html頁面,放在網站根目錄下

image

  然后,我們去請求該頁面

image

  是不是很神奇呢?雖然是靜態網頁,但因為我們那個模塊是注冊在IIS里面的,它改變了IIS的行為,所以仍然會在頁面底部插入一段輸出。

  6. 總結

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

NET技術如何理解IIS 7的兩種應用程序池的管道模式(Managed Pipeline Mode),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 恋夜秀场1234手机视频在线观看 | 上原结衣快播 | 扒开她的黑森林让我添动态图 | 99久久久无码国产精品AAA | 日韩成人在线视频 | 亚洲国产欧美在线人成aaaa20 | 国产无遮挡色视频免费观看性色 | 亚洲AV无码乱码A片无码蜜桃 | 俄罗斯12x13x处 | 把腿张开再深点好爽宝贝 | 领导边摸边吃奶边做爽在线观看 | 精品手机在线1卡二卡3卡四卡 | 精品人妻无码一区二区三区蜜桃臀 | 色偷偷av男人的天堂 | 国产AV亚洲国产AV麻豆 | 亚洲乱码日产精品BD在线下载 | 久久久久综合 | 999久久久无码国产精蜜柚 | 午夜国产羞羞视频免费网站 | 精品96在线观看影院 | 亚洲色综合中文字幕在线 | 中文字幕人成人乱码亚洲影视 | 999精品国产人妻无码系列 | 99日精品欧美国产 | 久久re视频这里精品09首页 | 九九热只有精品 | 久久精品视频15人人爱在线直播 | 丫鬟粗大狠狠贯穿h | 伦理电影2499伦理片 | 国产三级在线精品男人的天堂 | 色欲国产麻豆精品AV免费 | 欧美特黄99久久毛片免费 | 精品一区二区三区在线成人 | 亚洲欧洲日产国码中学 | 青青草国产精品久久 | 丰满的寡妇hd高清在线观看 | 久久爽狠狠添AV激情五月 | 国产三级多多影院 | 午夜福利92看看电影80 | 无套内射CHINESEHD | 国产扒开美女双腿屁股流白浆 |