7.ASP.NET Core InProcess Hosting

寵の児 提交于 2020-04-05 17:10:30

这篇文章,我们一起学习ASP.NET Core InProcess Hosting.这篇文章主要讨论下面几个观点:

  1. CreateDefaultBuilder方法执行什么任务?
  2. 什么是ASP.NET Core InProcess Hosting?
  3. 怎么使用InProcess hosting Model来托管ASP.NET Core应用程序
  4. InProcess Hosting在ASP.NET Core中是如何工作的

我们打开之前创建的空模板的ASP.NET Core项目,前面已经知道了ASP.NET Core创建了一个Program类,其中有一个Main方法。

image

当我们执行ASP.NET Core应用程序的时候,.NET运行时就会去寻找Main方法,Main方法是ASP.NET Core应用程序的入口。

在上面的图片中,你可以发现,首先调用的是CreateHostBuilder方法,然后CreateHostBuilder调用Host类中静态的CreateDefaultBuilder方法,也就是CreateDefaultBuilder方法创建了主机,托管了我们的ASP.NET Core 应用程序。

CreateDefaultBuilder方法做了哪些事情?

除了创建主机,CreateDefaultBuilder方法还做了下面几件事情:

  1. 创建了Web服务器(后面文章会讲到)
  2. 加载主机,并根据不同的配置资源,配置应用程序(后面马上会讲到)
  3. 配置日志(后面会说到)

我们来讨论一下,CreateDefaultBuilder方法在配置创建web服务器的时候,做了哪些事情。从主机的观点来看,一个ASP.NET Core应用程序可以有两种托管方式,一种是InProcess托管,另外一种就是OutOfProcess托管。这篇文章将InProcess托管,后面会有文章讲到OutOfProcess托管。

怎样在ASP.NET Core中配置InProcess托管

为了配置InProcess托管,很简单就是在项目文件中加上这个元素<AspNetCoreHostingModel>,并且写上值【InProcess

image

当我们使用任何模板创建ASP.NET Core Web应用程序的时候,默认的就是在IIS中使用InProcess托管,或者IIS Express托管我们的程序。

从性能的的观点来看,进程内托管模型比OutOfProcess托管模型提供了更高的请求吞吐量。在IIS中托管,使用的就是w3wp.如果使用IIS Express托管那么进程的名字就是iisexpress.

当我们运行程序,浏览器中看到的结果是:Hello World!

image

这是因为我们在Statrup中有下面的代码:

image

为了能显示进程的名字,需要这样写:System.Diagnostics.Process.GetCurrentProcess().ProcessName

image

然后运行,在浏览器中是这样的:

image

这是因为我们默认使用Visual Studio运行程序的时候,选项是IISExpress

image

IIS Express是一个轻量级的,自托管的IIS,它简化了Web应用程序的开发。最重要的一点需要记住:我们仅仅在开发阶段使用IISExpress,在生产阶段我们使用IIS。接下来的文章中,我将介绍如何在IIS中发布我们的ASP.NET Core应用程序。

OutOfProcess Hosting

在OutOfProcess hosting中有两种web服务器:

  1. 一个是内部服务器
  2. 还有一个就是外部服务器

内部服务器就是Kestrel,外部服务器就是IISNginx或者Apache

在InProcess 托管模型中,仅仅只有一个web服务器,也就是IIS。所以在InProcess 托管模型中,我们不会存在在外部服务器和内部服务器之间通讯导致的性能损耗。这也就是InProcess模型比OutOfProcess模型高的多的请求吞吐量的原因。

InProcess-Hosting-in-ASP.NET-Core-768x320

在接下来的文章中,我将会讲到ASP.NET Core应用程序中的 Kestrel Web服务器。这篇文章向大家解释了ASP.NET Core InProcess Hosting托管模型。希望能帮到你!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!