VS 2010 和 .NET 4.0 系列之《自動啓動ASP.NET應用》篇

在ASP.NET 4中自動啓動Web應用

有些web應用在可以處理用戶訪問之前,需要裝載很多的數據,或做一些花費很大的初始化處理。今天使用 ASP.NET 的開發人員經常使用應用的Global.asax 文件中的 “Application_Start”事件處理函數來做這些工作(該事件是在第一個請求執行時觸發的)。他們要麼設計定製腳本,週期性地嚮應用發假的請求,來“喚醒它(wake it up)”,從而在客戶訪問之前執行這個代碼,或者就讓那不幸的第一個訪問者等着這個邏輯執行完才處理其請求(這可以給這些用戶造成很長的耽擱)。

ASP.NET 4中有一個叫“自動啓動(auto-start)”的新特性,可以較好地解決這個場景, 可以在IIS 7.5(隨Windows 7和Windows Server 2008 R2發佈)上運行 ASP.NET 4時使用。這個自動啓動特性提供了一個可控制的方式來啓動一個應用工作進程,初始化ASP.NET 應用,然後接受HTTP請求。

將一個ASP.NET 4應用配置成自動啓動

要使用ASP.NET 4自動啓動特性,你首先配置IIS應用池工作進程,使在其中運行的應用在web服務器最先裝載時即自動啓動。配置方法是,打開IIS 7.5的applicationHost.config文件(C:\Windows\System32\inetsrv\config\applicationHost.config),在合適的<applicationPools>中加一個 startMode=”AlwaysRunning”屬性:

<applicationPools>

     <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />

</applicationPools>

如果你運行Windows任務管理器,點擊“顯示所有用戶的進程”複選框,然後把applicationHost.config文件的startMode屬性改動保存的話,在文件保存後的瞬間就會看到一個新的“w3wp.exe” 工作進程啓動起來了。

一個單一IIS應用池工作進程可以宿主多個ASP.NET 應用,你可以通過在對應應用的 <application> 中加一個serviceAutoStartEnabled="true" 屬性,來指定在工作進程裝載時你想要哪些應用自動啓動起來:

<sites>

     <site name="MySite" id="1">

          <application path="/" serviceAutoStartEnabled="true" serviceAutoStartProvider="PreWarmMyCache" />

     </site>

</sites>

<serviceAutoStartProviders>

     <add name="PreWarmMyCache" type="PreWarmCache, MyAssembly" />

</serviceAutoStartProviders>

上面的serviceAutoProvider="PreWarmMyCache&
quot;
屬性引用了config文件中的一個提供器(provider)配置,允許你配置一個自定義的類,該類用於封裝應用的任何 "預熱(warming up)" 邏輯。這個類會在工作進程和應用預載時(在收到任何外部web請求之前)自動被調用,可用於執行想要在接受和處理請求之前執行的任何初始化或緩存裝載邏輯:

public class PreWarmCache : System.Web.Hosting.IProcessHostPreloadClient {

    public void Preload(string[] parameters) {

        // Perform initialization and cache loading logic here…

    }

}

IIS會將應用啓動到這樣一個狀態,在這個狀態中,它不能接受請求,直到你的 "預熱(warming up)" 邏輯完成爲止。在Preload方法中的初始化代碼運行完返回之後,ASP.NET 應用會被標記爲可處理請求了。

你也可以把新的自動啓動"warming up"特性與IIS7 應用請求導向(Application Request Routing, ARR) 擴展的負載平衡功能結合起來,用它來在應用完成初始化,可以接受HTTP請求之後,向負載平衡器發信號,在這個時候,服務器可以放入web farm來處理請求。

結束語

ASP.NET 4 和 IIS 7.5的自動啓動新特性提供了一個定義明確的方式,允許你在任何終端用戶訪問你的應用之前,運行花費大的應用啓動和預緩存邏輯,這允許你一開始就將應用“預熱(warmed up)”好,提供一個始終如一的高性能體驗。

希望本文對你有所幫助,


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章