99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

ASP.NET Core 中的 Web 服務(wù)器實(shí)現(xiàn)

2019-04-17 08:58 更新

ASP.NET Core 應(yīng)用與進(jìn)程內(nèi) HTTP 服務(wù)器實(shí)現(xiàn)一起運(yùn)行。 該服務(wù)器實(shí)現(xiàn)偵聽(tīng) HTTP 請(qǐng)求,并以組成 HttpContext 的請(qǐng)求功能集形式,將它們呈現(xiàn)給應(yīng)用。

ASP.NET Core 隨附以下組件:

使用 IIS 或 IIS Express 時(shí),應(yīng)用會(huì)在以下其中一個(gè)進(jìn)程中運(yùn)行:

ASP.NET Core 模塊是本機(jī) IIS 模塊,用于處理 IIS 和進(jìn)程內(nèi) IIS HTTP 服務(wù)器或 Kestrel 之間的本機(jī) IIS 請(qǐng)求。 有關(guān)更多信息,請(qǐng)參見(jiàn)ASP.NET Core 模塊。

托管模型

進(jìn)程內(nèi)托管模型

使用進(jìn)程內(nèi)托管,ASP.NET Core 在與其 IIS 工作進(jìn)程相同的進(jìn)程中運(yùn)行。 進(jìn)程內(nèi)承載相較進(jìn)程外承載提供更優(yōu)的性能,因?yàn)檎?qǐng)求并不通過(guò)環(huán)回適配器進(jìn)行代理,環(huán)回適配器是一個(gè)網(wǎng)絡(luò)接口,用于將傳出的網(wǎng)絡(luò)流量返回給同一計(jì)算機(jī)。 IIS 使用 Windows 進(jìn)程激活服務(wù) (WAS) 處理進(jìn)程管理。

ASP.NET Core 模塊:

  • 執(zhí)行應(yīng)用初始化。
    • 加載 CoreCLR。
    • 調(diào)用 Program.Main。
  • 處理 IIS 本機(jī)請(qǐng)求的生存期。

定目標(biāo)到 .NET Framework 的 ASP.NET Core 應(yīng)用不支持進(jìn)程內(nèi)托管模型。

下圖說(shuō)明了 IIS、ASP.NET Core 模塊和進(jìn)程內(nèi)托管的應(yīng)用之間的關(guān)系:

ASP.NET Core 模塊

請(qǐng)求從 Web 到達(dá)內(nèi)核模式 HTTP.sys 驅(qū)動(dòng)程序。 驅(qū)動(dòng)程序?qū)⒈緳C(jī)請(qǐng)求路由到網(wǎng)站的配置端口上的 IIS,通常為 80 (HTTP) 或 443 (HTTPS)。 該模塊接收本機(jī)請(qǐng)求,并將它傳遞給 IIS HTTP 服務(wù)器 (IISHttpServer)。 IIS HTTP 服務(wù)器是將請(qǐng)求從本機(jī)轉(zhuǎn)換為托管的 IIS 進(jìn)程內(nèi)服務(wù)器實(shí)現(xiàn)。

IIS HTTP 服務(wù)器處理請(qǐng)求之后,請(qǐng)求會(huì)被推送到 ASP.NET Core 中間件管道中。 中間件管道處理該請(qǐng)求并將其作為 HttpContext 實(shí)例傳遞給應(yīng)用的邏輯。 應(yīng)用的響應(yīng)通過(guò) IIS HTTP 服務(wù)器傳遞回 IIS。 IIS 將響應(yīng)發(fā)送到發(fā)起請(qǐng)求的客戶(hù)端。

進(jìn)程內(nèi)托管選擇使用現(xiàn)有應(yīng)用,但 dotnet new 模板默認(rèn)使用所有 IIS 和 IIS Express 方案的進(jìn)程內(nèi)托管模型。

進(jìn)程外托管模型

由于 ASP.NET Core 應(yīng)用在獨(dú)立于 IIS 工作進(jìn)程的進(jìn)程中運(yùn)行,因此該模塊會(huì)處理進(jìn)程管理。 該模塊在第一個(gè)請(qǐng)求到達(dá)時(shí)啟動(dòng) ASP.NET Core 應(yīng)用的進(jìn)程,并在應(yīng)用關(guān)閉或崩潰時(shí)重新啟動(dòng)該應(yīng)用。 這基本上與在 Windows 進(jìn)程激活服務(wù) (WAS) 托管的進(jìn)程內(nèi)運(yùn)行的應(yīng)用中出現(xiàn)的行為相同。

下圖說(shuō)明了 IIS、ASP.NET Core 模塊和進(jìn)程外托管的應(yīng)用之間的關(guān)系:

ASP.NET Core 模塊

請(qǐng)求從 Web 到達(dá)內(nèi)核模式 HTTP.sys 驅(qū)動(dòng)程序。 驅(qū)動(dòng)程序?qū)⒄?qǐng)求路由到網(wǎng)站的配置端口上的 IIS,通常為 80 (HTTP) 或 443 (HTTPS)。 該模塊將該請(qǐng)求轉(zhuǎn)發(fā)到應(yīng)用的隨機(jī)端口(非端口 80/443)上的 Kestrel。

該模塊在啟動(dòng)時(shí)通過(guò)環(huán)境變量指定端口,IIS 集成中間件將服務(wù)器配置為偵聽(tīng) http://localhost:{PORT}。 執(zhí)行其他檢查,拒絕不是來(lái)自該模塊的請(qǐng)求。 該模塊不支持 HTTPS 轉(zhuǎn)發(fā),因此即使請(qǐng)求由 IIS 通過(guò) HTTPS 接收,它們還是通過(guò) HTTP 轉(zhuǎn)發(fā)。

Kestrel 從模塊獲取請(qǐng)求后,請(qǐng)求會(huì)被推送到 ASP.NET Core 中間件管道中。 中間件管道處理該請(qǐng)求并將其作為 HttpContext 實(shí)例傳遞給應(yīng)用的邏輯。 IIS 集成添加的中間件會(huì)將方案、遠(yuǎn)程 IP 和 pathbase 更新到帳戶(hù)以將請(qǐng)求轉(zhuǎn)發(fā)到 Kestrel。 應(yīng)用的響應(yīng)傳遞回 IIS,IIS 將響應(yīng)推送回發(fā)起請(qǐng)求的 HTTP 客戶(hù)端。

有關(guān) IIS 和 ASP.NET Core 模塊的配置指南,請(qǐng)參閱以下主題:

Kestrel

Kestrel 是 ASP.NET Core 項(xiàng)目模板中包括的默認(rèn) Web 服務(wù)器。

Kestrel 的使用方式如下:

  • 本身作為邊緣服務(wù)器,處理直接來(lái)自網(wǎng)絡(luò)(包括 Internet)的請(qǐng)求。Kestrel 直接與 Internet 通信,不使用反向代理服務(wù)器
  • 與反向代理服務(wù)器(如 Internet Information Services (IIS)、Nginx 或 Apache)結(jié)合使用。 反向代理服務(wù)器接收來(lái)自 Internet 的 HTTP 請(qǐng)求,并將這些請(qǐng)求轉(zhuǎn)發(fā)到 Kestrel。Kestrel 通過(guò)反向代理服務(wù)器(如 IIS、Nginx 或 Apache)間接與 Internet 進(jìn)行通信

使用或不使用反向代理服務(wù)器對(duì) ASP.NET Core 2.1 或更高版本的應(yīng)用來(lái)說(shuō)都是受支持的托管配置。

有關(guān) Kestrel 配置指南和何時(shí)在反向代理配置中使用 Kestrel 的信息,請(qǐng)參閱 ASP.NET Core 中的 Kestrel Web 服務(wù)器實(shí)現(xiàn)。

Nginx 與 Kestrel

若要了解如何在 Linux 上使用 Nginx 作為 Kestrel 的反向代理服務(wù)器,請(qǐng)參閱 使用 Nginx 在 Linux 上托管 ASP.NET Core

Apache 與 Kestrel

若要了解如何在 Linux 上使用 Apache 作為 Kestrel 的反向代理服務(wù)器,請(qǐng)參閱 使用 Apache 在 Linux 上托管 ASP.NET Core。

IIS HTTP 服務(wù)器

IIS HTTP 服務(wù)器是 IIS 的進(jìn)程內(nèi)服務(wù)器且為進(jìn)程內(nèi)部署所必需。 ASP.NET Core 模塊用于處理 IIS 和 IIS HTTP 服務(wù)器之間的本機(jī) IIS 請(qǐng)求。 有關(guān)更多信息,請(qǐng)參見(jiàn)ASP.NET Core 模塊。

HTTP.sys

如果 ASP.NET Core 應(yīng)用在 Windows 上運(yùn)行,則 HTTP.sys 是 Kestrel 的替代選項(xiàng)。 為了獲得最佳性能,通常建議使用 Kestrel。 在應(yīng)用向 Internet 公開(kāi)且所需功能受 HTTP.sys(而不是 Kestrel)支持的方案中,可以使用 HTTP.sys。 有關(guān)更多信息,請(qǐng)參見(jiàn)ASP.NET Core 中的 HTTP.sys Web 服務(wù)器實(shí)現(xiàn)。

HTTP.sys 直接與 Internet 進(jìn)行通信

對(duì)于僅向內(nèi)部網(wǎng)絡(luò)公開(kāi)的應(yīng)用,HTTP.sys 同樣適用。

HTTP.sys 直接與內(nèi)部網(wǎng)絡(luò)進(jìn)行通信

有關(guān) HTTP.sys 的配置指南,請(qǐng)參閱 ASP.NET Core 中的 HTTP.sys Web 服務(wù)器實(shí)現(xiàn)。

ASP.NET Core 服務(wù)器基礎(chǔ)結(jié)構(gòu)

Startup.Configure 方法中提供的 IApplicationBuilder 公開(kāi)了類(lèi)型 IFeatureCollection 的 ServerFeatures 屬性。 Kestrel 和 HTTP.sys 各自?xún)H公開(kāi)單個(gè)功能,即 IServerAddressesFeature,但是不同的服務(wù)器實(shí)現(xiàn)可能公開(kāi)其他功能。

IServerAddressesFeature 可用于查找服務(wù)器實(shí)現(xiàn)在運(yùn)行時(shí)綁定的端口。

自定義服務(wù)器

如果內(nèi)置服務(wù)器無(wú)法滿(mǎn)足應(yīng)用需求,可以創(chuàng)建一個(gè)自定義服務(wù)器實(shí)現(xiàn)。 .NET 的開(kāi)放 Web 接口 (OWIN) 指南 演示了如何編寫(xiě)基于 Nowin 的 IServer 實(shí)現(xiàn)。 只有應(yīng)用使用的功能接口需要實(shí)現(xiàn),但至少必須支持 IHttpRequestFeature 和 IHttpResponseFeature

服務(wù)器啟動(dòng)

集成開(kāi)發(fā)環(huán)境 (IDE) 或編輯器啟動(dòng)以下應(yīng)用時(shí),會(huì)啟動(dòng)服務(wù)器:

從項(xiàng)目文件夾中的命令提示符啟動(dòng)應(yīng)用時(shí),dotnet run 會(huì)啟動(dòng)該應(yīng)用和服務(wù)器(僅 Kestrel 和 HTTP.sys)。 可通過(guò) -c|--configuration 選項(xiàng)指定此配置,該選項(xiàng)設(shè)置為 Debug(默認(rèn)值)或 Release。 如果啟動(dòng)配置文件位于 launchSettings.json 文件中,請(qǐng)使用 --launch-profile <NAME> 選項(xiàng)設(shè)置啟動(dòng)配置文件(例如 Development 或 Production)。 有關(guān)詳細(xì)信息,請(qǐng)參閱 dotnet run 和 .NET Core 分發(fā)打包。

HTTP/2 支持

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

  • Kestrel操作系統(tǒng)Windows Server 2016/Windows 10 或更高版本?具有 OpenSSL 1.0.2 或更高版本的 Linux(例如,Ubuntu 16.04 或更高版本)macOS 的未來(lái)版本將支持 HTTP/2。目標(biāo)框架:.NET Core 2.2 或更高版本
  • HTTP.sysWindows Server 2016/Windows 10 或更高版本目標(biāo)框架:不適用于 HTTP.sys 部署。
  • IIS(進(jìn)程內(nèi))Windows Server 2016/Windows 10 或更高版本;IIS 10 或更高版本目標(biāo)框架:.NET Core 2.2 或更高版本
  • IIS(進(jìn)程外)Windows Server 2016/Windows 10 或更高版本;IIS 10 或更高版本面向公眾的邊緣服務(wù)器連接使用 HTTP/2,但與 Kestrel 的反向代理連接使用 HTTP/1.1。目標(biāo)框架:不適用于 IIS 進(jìn)程外部署。

?Kestrel 在 Windows Server 2012 R2 和 Windows 8.1 上對(duì) HTTP/2 的支持有限。 支持受限是因?yàn)榭稍谶@些操作系統(tǒng)上使用的受支持 TLS 密碼套件列表有限。 可能需要使用橢圓曲線(xiàn)數(shù)字簽名算法 (ECDSA) 生成的證書(shū)來(lái)保護(hù) TLS 連接。

HTTP/2 連接必須使用應(yīng)用程序?qū)訁f(xié)議協(xié)商 (ALPN) 和 TLS 1.2 或更高版本。 有關(guān)詳細(xì)信息,請(qǐng)參閱與服務(wù)器部署方案相關(guān)的主題。


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)