日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

asp.net core 系列 18 web服务器实现

發布時間:2025/3/20 asp.net 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp.net core 系列 18 web服务器实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.?ASP.NET Core Module

  在介紹ASP.NET Core Web實現之前,先來了解下ASP.NET Core Module。該模塊是插入 IIS 管道的本機 IIS 模塊(本機是指程序所部署的服務器)。是基于windows平臺處理 IIS和進程內IISHttpServer或Kestrel。用于:

  (1) 在 IIS 工作進程 (w3wp.exe) 內托管 ASP.NET Core 應用,稱為進程內托管模型。

  (2) 將 Web 請求轉發到運行 Kestrel 服務器的后端 ASP.NET Core 應用,稱為進程外托管模型。

  在進程內托管時,該模塊會使用 IIS 進程內服務器實現,即IISHttpServer。在進程外托管時,該模塊僅適用于 Kestrel。 該模塊與 HTTP.sys 不兼容。關于IIS 在 Windows 上托管 ASP.NET Core。安裝ASP.NET Core Model,在 "asp.net core 系列 9 環境" 中有介紹。

    --發布到iis上的配置節點 <handlers><add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /></handlers>

?

二. ?windows平臺web服務器介紹

  在windows平臺下,asp.net core有以下幾種HTTP 服務器組件:

    (1) Kestrel服務器是默認跨平臺 HTTP 服務器實現。

    (2) IISHttpServer 是IIS 的進程內服務器。

    (3) HTTP.sys 服務器是僅用于 Windows 的 HTTP 服務器,它基于 HTTP.sys 核心驅動程序和 HTTP 服務器 API。

  當使用 IIS 或 IIS Express 時,應用程序會在以下其中一個進程中運行:

    (1) 在IIS工作進程(進程內宿主模型)與IIS HTTP服務器的相同進程中。推薦配置為In-process(用于windows上進程內托管)。

    (2) 獨立于IIS工作進程(進程外宿主模型)的進程中使用Kestrel服務器。配置為OutOfProcess

?

  1.1? 進程內托管模型 In-process hosting model

    使用進程內宿主,ASP.NET Core應用程序運行在與其IIS worker進程相同的進程中。進程內托管比進程外托管提供了更好的性能,因為請求不會通過環回適配器進行代理,環回適配器是一個網絡接口,將傳出的網絡流量返回到同一臺機器。

    由?ASP.NET Core Module執行應用初始化:(1)加載CoreCLR、(2)調用 Program.Main。以及處理 IIS 本機請求的生存期。

    下圖說明了 IIS、ASP.NET Core Module和進程內托管的應用之間的關系:

    ?ASP.NET Core Module接收本機請求,并將它傳遞給 IISHttpServer?。 IISHttpServer?將請求從本機轉換為托管的 IIS 進程內服務器實現。

    IISHttpServer?處理請求之后,請求會被推送到 ASP.NET Core 中間件管道中。?中間件管道處理該請求并將其作為?HttpContext?實例傳遞給應用的邏輯(Application code)。?應用的響應傳遞回 IIS,IIS 將響應推送回發起請求的客戶端。

?

  1.2 進程外托管模型 Out-of-process hosting model

    因為ASP.NET Core運行在獨立于IIS工作進程的進程中, 因此該模塊負責進程管理。該模塊在第一個請求到達時啟動 ASP.NET Core 應用的進程,并在應用關閉或崩潰時重新啟動該應用。

    下圖說明了 IIS、ASP.NET Core Module和進程外托管的應用之間的關系:

    ASP.NET Core Module在啟動時通過環境變量指定端口,IIS 集成中間件將服務器配置為偵聽?http://localhost:{PORT}。?執行其他檢查,拒絕不是來自該ASP.NET Core Module的請求。

    Kestrel 從ASP.NET Core Module獲取請求后,請求會被推送到 ASP.NET Core 中間件管道中。?中間件管道處理該請求并將其作為?HttpContext?實例傳遞給應用的邏輯(Application code)。?IIS 集成添加的中間件會將方案、遠程 IP 和 pathbase 更新到帳戶以將請求轉發到 Kestrel。?應用的響應傳遞回 IIS,IIS 將響應推送回發起請求的 HTTP 客戶端。

   

    最后對于非windows平臺, asp.net core使用Kestrel ?Web服務器。這是默認跨平臺 HTTP 服務器實現。

?

二.?? Kestrel 服務器

  Kestrel 是 ASP.NET Core 項目模板中包括的默認 Web 服務器。默認情況下,ASP.NET Core 項目模板使用 Kestrel。 在 Program.cs 中,模板代碼調用 CreateDefaultBuilder,后者在后臺調用 UseKestrel。Kestrel 的使用方式如下:

    (1) 它本身就是一個邊緣服務器,直接處理來自網絡(包括Internet)的請求?!   ?/p>

    (2) 與反向代理服務器(如 Internet Information Services (IIS)、Nginx 或 Apache)結合使用。 反向代理服務器接收來自 Internet 的 HTTP 請求,并將這些請求轉發到 Kestrel。

?

三. IISHTTPServer 服務器

?  IISHTTPServer是 IIS 的進程內服務器且為進程內部署所必需。 ASP.NET Core Module 用于處理 IIS 和 IISHTTPServer之間的本機 IIS 請求。

  若要配置用于進程內托管的應用,請將?<AspNetCoreHostingModel>?屬性添加到值為?InProcess(進程外托管使用?OutOfProcess?進行設置)的應用項目文件。如果文件中不存在?<AspNetCoreHostingModel>?屬性,則默認值為?OutOfProcess

    <PropertyGroup><AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel></PropertyGroup>

    InProcess時使用 IIS HTTP 服務器 (IISHttpServer) 而不是 Kestrel 服務器。OutOfProcess時使用 Kestrel 服務器,而不是 IIS HTTP 服務器 (IISHttpServer)

?

四. HTTP.sys服務器

? ? ? ? ?如果 ASP.NET Core 應用在 Windows 上運行,則 HTTP.sys 是 Kestrel 的替代選項。為了獲得最佳性能,通常建議使用 Kestrel。?在應用向 Internet 公開且所需功能受 HTTP.sys(而不是 Kestrel)支持的方案中,可以使用 HTTP.sys。

  配置 ASP.NET Core 應用以使用 HTTP.sys。構建 Web 主機時調用 UseHttpSys 擴展方法,同時指定所需的 HTTP.sys 選項。在 Visual Studio 中,默認啟動配置文件是針對 IIS Express 的。?若要作為控制臺應用運行該項目,請手動更改所選配置文件。

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().UseHttpSys(options =>{// The following options are set to default values.options.Authentication.Schemes = AuthenticationSchemes.None;options.Authentication.AllowAnonymous = true;options.MaxConnections = null;options.MaxRequestBodySize = 30000000;options.UrlPrefixes.Add("http://localhost:5000");});

  

五. http/2.0支持

  以下部署方案中的 ASP.NET Core 支持 HTTP/2

    

Kestrel

操作系統:

Windows Server 2016/Windows 10 或更高版本

具有 OpenSSL 1.0.2 或更高版本的 Linux

macOS 的未來版本將支持 HTTP/2

目標框架:

.NET Core 2.2 或更高版本

HTTP.sys

操作系統:

Windows Server 2016/Windows 10 或更高版本

目標框架:

不適用于 HTTP.sys部署。

IIS(進程內)

操作系統:

Windows Serve IIS 10 或更高版本

IIS 10 或更高版本

目標框架:

.NET Core 2.2 或更高版本

IIS(進程外)

操作系統:

Windows Serve IIS 10 或更高版本

IIS 10 或更高版本

面向公眾的邊緣服務器連接使用 HTTP/2,但與 Kestrel 的反向代理連接使用 HTTP/1.1。

目標框架:

不適用于 IIS 進程外部署。

?

  總結: 

    (1) ASP.NET Core Module模塊是適應于windows平臺上的iis。

    (2) 進程內托管模型是使用 IISHttpServer是適應于windows平臺上 IIS 的進程內服務器,。將ASP.NET Core Module接收的請求轉換為托管的 IIS 進程內服務器實現。用IISHttpServer服務器。

    (3) 進程外托管模型是獨立于iis, 可以做反向代理,?用Kestrel 服務器,可以應用在windows或linux平臺上。

    (4) 如果 ASP.NET Core 應用在 Windows 上運行,則 HTTP.sys 是 Kestrel 的替代選項。為了獲得最佳性能,通常建議使用 Kestrel。?

    (5) Kestrel 是 ASP.NET Core 項目模板中默認 Web 服務器.可以結合反向代理服務器一起使用(如 Internet Information Services (IIS)、Nginx 或 Apache)。

   

?

?

  參考文獻:

    ASP.NET Core 中的 Kestrel Web 服務器參數設置

      https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2

    ASP.NET Core 中的 HTTP.sys Web 服務器參數設置

      https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/httpsys?view=aspnetcore-2.2

    關于ASP.NET Core 中的aspnet-core-module

     ? ?https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.2

    使用 Nginx 在 Linux 上托管 ASP.NET Core

      https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2

    關于Linux 上 .NET Core 的先決條件

      https://docs.microsoft.com/zh-cn/dotnet/core/linux-prerequisites?tabs=netcore2x

 

?

轉載于:https://www.cnblogs.com/MrHSR/p/10324110.html

總結

以上是生活随笔為你收集整理的asp.net core 系列 18 web服务器实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。