亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

Kestrel

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

Kestrel 支持以下方案:

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

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

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

Kestrel 用于反向代理配置:

實例

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

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

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

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

dotnet new webapp -o myapp

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

dotnet dev-certs https --trust

此時,這個項目可以直接運行:

cd myapp
dotnet watch run

此時就是以內(nèi)置的Kestrel作為服務(wù)器直接運行的。我們修改一下代碼,查看一下運行時的進程,修改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īng)用名稱。接下來我們以這個代碼為基礎(chǔ),分別看看其他托管模式中的情況。

IIS

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

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

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

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

在進程外托管時,該模塊僅適用于 Kestrel。 該模塊無法與 HTTP.sys 一起工作。

進程內(nèi)托管

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

實例

代碼還是與之前相同的代碼,首先將代碼發(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)站可以看到:

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

進程外托管

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

若要配置進程外托管應(yīng)用,請在項目文件 ( .csproj) 中將 屬性的值設(shè)置為 OutOfProcess:

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

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

實例

修改myapp.csproj文件:

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

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

此時的進程名稱為:dotnet,這是進程外托管模式。

HTTP.sys

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

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

HTTP.sys 支持以下功能:

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

實例

修改代碼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īng)用。

dotnet watch run

此時就是以HTTP.sys方式托管,此時進程名也是myapp。

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

總結(jié)

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

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

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

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

相關(guān)文章

最新評論