ASP.NET Core基础系列(三)(托管模型)
从托管的角度来看,一个ASP.NET Core 应用程序可以通过两种方式托管,即进程托管(InProcess)或进程外托管(OutOfProcess)。
一、InProcess
进程内托管的情况下,只有一个web服务器,即IIS。
1.1 什么是IIS Express
IIS Express是IIS的轻量级自包含版本。它针对Web应用程序开发进行了优化。值得一提的是,我们仅在开发中使用IIS Express,在生产中,我们一般使用IIS。
1.2 如何设置为InProcess托管
只需修改项目文件即可:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
</Project>
此处添加元素并将其值设置为 InProcess,该节点也可以是OutOfProcess。
1.3 将托管模型设置为InProcess时会发生什么
在 InProcess 托管的情况下(即当 CreateDefaultBuilder() 将值视为项目文件中 AspNetCoreHostingModel 元素的 InProcess 时),场景后面的 CreateDefaultBuilder() 方法内部调用 UseIIS() 方法。然后在 IIS 工作程序(即 iIS 的 w3wp.exe 和 Iisxpress.exe 的 IISExpress)中托管应用程序。
1.4 如何确定是否在InProcess进程下执行
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync($"{Process.GetCurrentProcess().ProcessName}");
});
});
然后以IIS Express的方式启动,这样会在Web页面上打印当前进程名称。
二、OutOfProcess
在外进程托管的情况下,有2台Web服务器。
- 一个内部web服务器:称为Kestrel。
- 一个外部web服务器:可以时IIS、Nginx****或Apache。
2.1 什么是Kestrel Web服务器
ASP.NET Core是一个跨平台框架。这意味着它支持不同类型的操作系统上开发和运行应用程序。Kestrel是ASP.NET Core应用程序的跨平台web服务器,这意味着该服务器支持ASP.NET Core支持的所有平台和版本。默认情况下,它包含在.NET Core应用程序中作为内部Web服务器。
2.2 如何使用kestrel Web服务器运行应用程序
以项目名称的方式启动程序,如何在我们发现控制台会先启动如何才会打开Web页面。
三、总结
3.1 使用IIS Express运行应用程序
如果选择IIS Express启动应用程序,则它将使用IIS服务器,并且将使用launchSettings.json文件中提及的URL和端口号。值得一提的是,我们可以看到后台自己启动了IIS Express服务。
3.2 使用Kestrel服务器运行应用程序
如果项目名称启动应用程序,首先,它将启动控制台并使用kestrel服务器托管应用程序。