7.ASP.NET Core InProcess Hosting
这篇文章,我们一起学习ASP.NET Core InProcess Hosting.这篇文章主要讨论下面几个观点:
- CreateDefaultBuilder方法执行什么任务?
- 什么是ASP.NET Core InProcess Hosting?
- 怎么使用InProcess hosting Model来托管ASP.NET Core应用程序
- InProcess Hosting在ASP.NET Core中是如何工作的
我们打开之前创建的空模板的ASP.NET Core项目,前面已经知道了ASP.NET Core创建了一个Program类,其中有一个Main方法。
当我们执行ASP.NET Core应用程序的时候,.NET运行时就会去寻找Main方法,Main方法是ASP.NET Core应用程序的入口。
在上面的图片中,你可以发现,首先调用的是CreateHostBuilder方法,然后CreateHostBuilder调用Host类中静态的CreateDefaultBuilder方法,也就是CreateDefaultBuilder方法创建了主机,托管了我们的ASP.NET Core 应用程序。
CreateDefaultBuilder方法做了哪些事情?
除了创建主机,CreateDefaultBuilder方法还做了下面几件事情:
- 创建了Web服务器(后面文章会讲到)
- 加载主机,并根据不同的配置资源,配置应用程序(后面马上会讲到)
- 配置日志(后面会说到)
我们来讨论一下,CreateDefaultBuilder方法在配置创建web服务器的时候,做了哪些事情。从主机的观点来看,一个ASP.NET Core应用程序可以有两种托管方式,一种是InProcess托管,另外一种就是OutOfProcess托管。这篇文章将InProcess托管,后面会有文章讲到OutOfProcess托管。
怎样在ASP.NET Core中配置InProcess托管
为了配置InProcess托管,很简单就是在项目文件中加上这个元素<AspNetCoreHostingModel>,并且写上值【InProcess】
当我们使用任何模板创建ASP.NET Core Web应用程序的时候,默认的就是在IIS中使用InProcess托管,或者IIS Express托管我们的程序。
从性能的的观点来看,进程内托管模型比OutOfProcess托管模型提供了更高的请求吞吐量。在IIS中托管,使用的就是w3wp.如果使用IIS Express托管那么进程的名字就是iisexpress.
当我们运行程序,浏览器中看到的结果是:Hello World!
这是因为我们在Statrup中有下面的代码:
为了能显示进程的名字,需要这样写:System.Diagnostics.Process.GetCurrentProcess().ProcessName
然后运行,在浏览器中是这样的:
这是因为我们默认使用Visual Studio运行程序的时候,选项是IISExpress
IIS Express是一个轻量级的,自托管的IIS,它简化了Web应用程序的开发。最重要的一点需要记住:我们仅仅在开发阶段使用IISExpress,在生产阶段我们使用IIS。接下来的文章中,我将介绍如何在IIS中发布我们的ASP.NET Core应用程序。
OutOfProcess Hosting
在OutOfProcess hosting中有两种web服务器:
- 一个是内部服务器
- 还有一个就是外部服务器
内部服务器就是Kestrel,外部服务器就是IIS、Nginx或者Apache。
在InProcess 托管模型中,仅仅只有一个web服务器,也就是IIS。所以在InProcess 托管模型中,我们不会存在在外部服务器和内部服务器之间通讯导致的性能损耗。这也就是InProcess模型比OutOfProcess模型高的多的请求吞吐量的原因。
在接下来的文章中,我将会讲到ASP.NET Core应用程序中的 Kestrel Web服务器。这篇文章向大家解释了ASP.NET Core InProcess Hosting托管模型。希望能帮到你!