ASP.NET Core模塊概述


原文地址:ASP.NET Core Module overview

By Tom Dykstra, Rick Strahl, and Chris Ross

ASP.NET Core模塊(ANCM)讓你能夠在IIS之后運行ASP.NET Core應用,IIS和Kestrel各司其職,前者專於安全性,可管理性等方面,后者專於性能,我們從兩種技術中都能獲得益處。ANCM只和Kestrel協同工作,它不兼容於Weblistener

支持的Windows版本:

  • Windows 7和Windows Server 2008 R2和更高版本

查看或下載代碼示例

ASP.NET Core 模塊做了什么

ANCM是一個原生的IIS模塊,它掛接到IIS管道,並將流量重定向到后端ASP.NET Core應用。其他大多數模塊,如windows身份認證,仍然有機會運行。ANCM只在當一個handler被請求選擇時進行控制,handler映射配置在應用的web.config文件中定義。

因為ASP.NET Core應用運行在某個IIS工作進程分離出的一個進程中,ANCM也能進行進程管理。當接收到第一個請求的時候,ANCM會為該ASP.NET Core應用啟動進程。ANCM也有重啟崩潰進程的功能。和運行在IIS進程中,通過WAS(Windows Activation Service)進行管理的傳統ASP.NET 應用,在本質上是相同的。

下圖說明了IIS,ANCM以及ASP.NET Core應用三者之間的關系

來自Web端的請求首先會觸發內核模塊HTTP.SYS驅動程序,HTTP.SYS將請求轉接到IIS主端口(80)或SSL端口(443)。接下來請求會轉向應用程序中配置的HTTP端口,該端口不再是80/443端口。再之后Kestrel捕獲請求,推送到ASP.NET Core中間件管道中,並將其作為一個HttpContext實例供應用程序邏輯處理。最后應用的響應信息將重傳回IIS,由IIS將其傳回到原先發起請求的HTTP客戶端。

ANCM 還有一些其他功能:

  • 設置環境變量。
  • 日志以標准輸出形式輸出到文件存儲中。
  • 轉寄Windows身份認證tokens。

怎么在ASP.NET Core應用中使用ANCM

這一節提供了對IIS服務器和ASP.NET Core應用設置過程的概述。更詳細的信息,請參考發布到IIS

安裝 ANCM

ANCM已經被安裝在服務器IIS和開發機器IIS Express中。對於服務器而言,ANCM被包括在 ASP.NET Core Server Hosting Bundle 中。對於開發機器而言,Visual Studio會自動為IIS Express和IIS(如果IIS已經被安裝在開發機器中)安裝ANCM。

安裝 IISIntegration NuGet 包

在應用中可以安裝Microsoft.AspNetCore.Server.IISIntegration。這是一個互操作性包,它可以讀取通過ANCM廣播的環境變量以設置你的應用。環境變量提供相應配置信息,例如端口偵聽。

調用 UseIISIntegration

在應用的Main方法中,可以調用位於WebHostBuilderUseIISIntegration擴展方法

public static int Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .AddCommandLine(args)
        .Build();

    var builder = new WebHostBuilder()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseConfiguration(config)
        .UseStartup<Startup>()
        .UseUrls("http://localhost:5001")
        .UseIISIntegration()
        .UseKestrel(options =>
        {
            if (config["threadCount"] != null)
            {
                options.ThreadCount = int.Parse(config["threadCount"]);
            }
        });

    var host = builder.Build();
    host.Run();

    return 0;
}

UseIISIntegration方法會查找ANCM設置的環境變量,如果沒找到它將什么也不做。這種機制有利於例如在MacOS上開發測試程序並部署到運行IIS的服務器的場景。當在Mac上運行時,Kestrel以web服務器的身份存在,但是當應用部署到IIS環境時,它會自動搭接ANCM和IIS。

不要調用UseUrls

ANCM會生成一個動態端口以分配給后端進程。IWebHostBuilder.UseIISIntegration拿着這個動態端口並配置Kestrel以偵聽http://locahost:{dynamicPort}/。這將覆蓋其他的URL配置,例如IWebHostBuilder.UseUrls。因此,在你使用ANCM時你不需要調用UseUrls。當你不借助IIS運行應用時,它將會偵聽默認端口號http://localhost:5000

當不借助IIS運行應用時,如果你仍需要設置端口號,你可以調用UseURLs。此種情況下,IISIntegration不會做任何事情,你提供給UseUrls的端口號也將生效。但是當你借助IIS運行應用時,由ANCM動態生成的端口號將覆蓋你傳遞給UseUrls的任何設置信息。

在ASP.NET Core 1.0中,UseUrls的調用需要放在IISIntegration之前,這是為了防止ANCM配置的端口被重寫。但是在ASP.NET Core 1.1中,因為ANCM設置總是會覆蓋UseUrls,這樣的調用順序將不會再有效。

在Web.config中設置ANCM選項

用以存儲ANCM配置信息的Web.config文件位於應用的根目錄文件夾。該文件中的配置信息表示你的應用程序的啟動命令和參數。有關配置選項的示例Web.config代碼和指南,請參考ASP.NET Core 模塊配置參考

在開發中借助IIS Express運行應用

通過使用ASP.NET Core模板定義的默認配置文件,Visual Studio可以啟動IIS Express服務。

下一步

更多的詳細信息,請參考以下資源:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM