欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談ASP.NET Core的幾種托管方式

 更新時(shí)間:2019年12月11日 10:14:54   作者:cag  
這篇文章主要介紹了淺談ASP.NET Core的幾種托管方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Kestrel

Kestrel 是一個(gè)跨平臺(tái)的適用于 ASP.NET Core 的 Web 服務(wù)器,默認(rèn)包括在 ASP.NET Core 項(xiàng)目模板中。

Kestrel 支持以下方案:

  • HTTPS
  • 用于啟用 WebSocket 的不透明升級(jí)
  • 用于獲得 Nginx 高性能的 Unix 套接字
  • HTTP/2(除 macOS† 以外)

可以單獨(dú)使用 Kestrel,也可以將其與反向代理服務(wù)器 (如 Internet Information Services (IIS)、Nginx 或 Apache)結(jié)合使用。 反向代理服務(wù)器接收來自網(wǎng)絡(luò)的 HTTP 請(qǐng)求,并將這些請(qǐng)求轉(zhuǎn)發(fā)到 Kestrel。

Kestrel 用作邊緣(面向 Internet)Web 服務(wù)器:

Kestrel 用于反向代理配置:

實(shí)例

為了看起來更加簡單直接,這里我們使用VS Code新建一個(gè)ASP.NET Core的Web應(yīng)用,并使用Kestrel作為服務(wù)器。

首先需要在計(jì)算機(jī)上安裝.NET Core環(huán)境。這里可以查看 官網(wǎng) 。本例中使用的是.NET Core 3.1。

  • 新建APS.NET Core Web應(yīng)用

在一個(gè)目錄下打開命令窗口,輸入命令:

dotnet new webapp -o myapp

這樣,就使用默認(rèn)模板新建了一個(gè)項(xiàng)目。如果是首次安裝使用.NET Core,還需要信任證書:

dotnet dev-certs https --trust

此時(shí),這個(gè)項(xiàng)目可以直接運(yùn)行:

cd myapp
dotnet watch run

此時(shí)就是以內(nèi)置的Kestrel作為服務(wù)器直接運(yùn)行的。我們修改一下代碼,查看一下運(yùn)行時(shí)的進(jìn)程,修改Pages/Index.cshtml如下:

@page

@using System.Diagnostics
@model IndexModel
@{
 ViewData["Title"] = "Home page";
}

<div class="text-center">
 <h1 class="display-4">Welcome</h1>
 <p>
  "@Process.GetCurrentProcess().ProcessName"
 </p>
 <p>Learn about <a  rel="external nofollow" >building Web apps with ASP.NET Core</a>.</p>
</div>

運(yùn)行程序我們看到:

此時(shí)的進(jìn)程名稱就是我們的應(yīng)用名稱。接下來我們以這個(gè)代碼為基礎(chǔ),分別看看其他托管模式中的情況。

IIS

在IIS中托管ASP.NET Core應(yīng)用需要ASP.NET Core 模塊。

ASP.NET Core 模塊是插入 IIS 管道的本機(jī) IIS 模塊,用于:

  • 在 IIS 工作進(jìn)程 (w3wp.exe) 內(nèi)托管 ASP.NET Core 應(yīng)用,稱為進(jìn)程內(nèi)托管模型。
  • 將 Web 請(qǐng)求轉(zhuǎn)發(fā)到運(yùn)行 Kestrel 服務(wù)器的后端 ASP.NET Core 應(yīng)用,稱為進(jìn)程外托管模型。

在進(jìn)程內(nèi)托管時(shí),該模塊會(huì)使用 IIS 進(jìn)程內(nèi)服務(wù)器實(shí)現(xiàn),即 IIS HTTP 服務(wù)器 (IISHttpServer)。

在進(jìn)程外托管時(shí),該模塊僅適用于 Kestrel。 該模塊無法與 HTTP.sys 一起工作。

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

ASP.NET Core 應(yīng)用默認(rèn)為進(jìn)程內(nèi)托管模型。在進(jìn)程內(nèi)托管時(shí),使用 IIS HTTP 服務(wù)器 (IISHttpServer) 而不是 Kestrel 服務(wù)器。

實(shí)例

代碼還是與之前相同的代碼,首先將代碼發(fā)布一下:

dotnet publish --configuration Release

接下來將publish文件夾中的文件托管到IIS中。

要在IIS中托管ASP.NET Core網(wǎng)站,首先要安裝.NET Core 托管捆綁包安裝程序 ,安裝后重啟電腦或在命令行中執(zhí)行:

 net stop was /y

之后執(zhí)行:

net start w3svc

然后在IIS中新建網(wǎng)站,并將根目錄指向上一步中的publish文件夾,瀏覽網(wǎng)站可以看到:

此時(shí)進(jìn)程名稱為:w3wp。這就是默認(rèn)的進(jìn)程內(nèi)托管模式。

進(jìn)程外托管

進(jìn)程外托管使用 Kestrel 服務(wù)器,而不是 IIS HTTP 服務(wù)器 (IISHttpServer)。

若要配置進(jìn)程外托管應(yīng)用,請(qǐng)?jiān)陧?xiàng)目文件 ( .csproj) 中將 屬性的值設(shè)置為 OutOfProcess:

<PropertyGroup>
 <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>

Process.GetCurrentProcess().ProcessName 報(bào)告w3wp/iisexpress(進(jìn)程內(nèi))或 dotnet(進(jìn)程外)。

實(shí)例

修改myapp.csproj文件:

<Project Sdk="Microsoft.NET.Sdk.Web">
 <PropertyGroup>
 <TargetFramework>netcoreapp3.0</TargetFramework>
 <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
 </PropertyGroup>
 <ItemGroup>
 </ItemGroup>
</Project>

之后重新發(fā)布并部署到IIS,查看網(wǎng)站可以看到:

此時(shí)的進(jìn)程名稱為:dotnet,這是進(jìn)程外托管模式。

HTTP.sys

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

HTTP.sys僅能在Windows上運(yùn)行,且不能與ASP.NET Core模塊同時(shí)使用。在不想使用IIS或者需要使用Kestrel不具有的功能時(shí)可以使用HTTP.sys。

HTTP.sys 支持以下功能:

  • Windows 身份驗(yàn)證
  • 端口共享
  • 具有 SNI 的 HTTPS
  • 基于 TLS 的 HTTP/2(Windows 10 或更高版本)
  • 直接文件傳輸
  • 響應(yīng)緩存
  • WebSocket(Windows 8 或更高版本)

實(shí)例

修改代碼Program.cs如下:

//using Microsoft.AspNetCore.Server.HttpSys;

public static IHostBuilder CreateHostBuilder(string[] args) =>
   Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
     webBuilder.UseHttpSys(options =>
      {
       options.AllowSynchronousIO = true;
       options.Authentication.Schemes = AuthenticationSchemes.None;
       options.Authentication.AllowAnonymous = true;
       options.MaxConnections = null;
       options.MaxRequestBodySize = 30000000;
       options.UrlPrefixes.Add("http://localhost:5005");
      });
     webBuilder.UseStartup<Startup>();
    });

在命令行中輸入運(yùn)行應(yīng)用。

dotnet watch run

此時(shí)就是以HTTP.sys方式托管,此時(shí)進(jìn)程名也是myapp。

但是這種方式不能托管在IIS中,如果將發(fā)布的代碼放到IIS中則會(huì)報(bào)錯(cuò)。

總結(jié)

綜上所述,Kestrel是一個(gè)跨平臺(tái)的服務(wù)器,HTTP.sys則只能用于Windows中。Kestrel與HTTP.sys都是嵌入在ASP.NET Core中的服務(wù)器,它們有點(diǎn)類似于SpringBoot中內(nèi)嵌的Tomcat。

即使不使用額外的WEB服務(wù)器,例如IIS,Nginx,Apache等,項(xiàng)目最終生成的文件也可以直接運(yùn)行,并提供HTTP服務(wù),不過,一般推薦的形式是,使用Kestrel作為應(yīng)用服務(wù)器,使用常用的WEB服務(wù)器(Nginx,Apache等)作為反向代理。

在IIS中,官方提供了ASP.NET Core模塊,方便了將ASP.NET Core應(yīng)用托管于IIS中,并提供了兩種模式,其工作方式也類似于反向代理。在Windows中,對(duì)于某些Kestrel不支持的功能,則可以使用HTTP.sys。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論