每天学一点,每天积累一点,进步就不止一点点!PS:好记性不如烂笔头,学会总结,学会思考~~~ ----要飞翔,必须靠自己!

灰太狼的梦想

好记性不如烂笔头,学会总结,学会思考~~~

9.ASP.NET Core OutOfProcess Hosting

这篇文章中,我将详细介绍ASP.NET Core OutOfProcess Hosting模型。强烈推荐你去看看我之前写的ASP.NET Core InProcess以及ASP.NET Core中的 Kestrel Web服务器。这篇文章我将向大家详细介绍下面几个问题:

  1. 怎样在ASP.NET Core中配置OutOfProcess Hosting?
  2. 什么是OutOfProcess Hosting?
  3. ASP.NET Core中OutOfProcess Hosting是如何工作的?
  4. 我们能否,不使用内置的Kestrel Web服务器来运行ASP.NET Core应用程序?
  5. 如果Kestrel本身可以作为web服务器使用,可以直接处理传入的HTTP请求,那么我们为什么需要反向代理服务器呢?

在开始学习OutOfProcess Hosting之前,我们先回顾一下InProcess Hosting。

ASP.NET Core InProcess Hosting

在前面的文章中,已经了解到,为了配置InProcess Hosting,我们需要在项目文件中加入下面的代码:

image

在ASP.NET Core的InProcess Hosting模型下,我们的应用程序是托管在IIS工作进程下的(也就是w3wp.exe,如果是使用IIS的话,如果使用的是IIS Express那么工作进程就是iisexpress.exe).你需要牢记的一点就是:在InProcess 模型下,我们只有一个Web服务器,也就是IIS 服务器。

InProcess Hosting in ASP.NET Core

怎样在ASP.NET Core中配置OutOfProcess Hosting?

我们可以有两种方式,来配置OutOfProcess Hosting

方式一:

在项目文件下,添加一个AspNetCoreHostingModel节点,值填写OutOfProcess,:

image

方式二

默认的Hosting方式就是OutOfProcess hosting,这也就意味着,你去掉AspNetCoreHostingModel节点,默认就是OutOfProcess Hosting了。

在ASP.NET Core中OutOfProcess Hosting

在OutOfProcess Hosting模型中,有两种Web服务器:

  1. 内置的web服务器就是Kestrel
  2. 另外的外部服务器就是IIS、Apache、以及Nginx

您需要记住的最重要的一点是,取决于您如何使用OutOfProcess托管模型运行应用程序,外部web服务器可能会被使用,也可能不会被使用。

我们已经知道Kestrel web服务器是一个跨平台的web服务器,并且是嵌入到ASP.NET Core的应用程序中的。所以当你使用OutOfProcess 托管模型的时候,Kestrel可能有以下几种方式使用:

方式一:

我们可以使用Kestrel Web服务器作为面向internet的Web服务器,它将直接处理传入的HTTP请求。在这个场景中,只有Kestrel服务器被使用了,也就是外部服务器没有被使用。所以当我们使用.NET Core CLI运行ASP.NET Core应用程序的时候,仅仅只有Kestrel服务器被使用了,用来处理HTTP请求。

Kestrel Server Out Of Process Hosting

方式二:

Kestrel Web服务器还可以与反向代理服务器(如IIS、Apache或Nginx)组合使用。那么你肯定有这样的疑问:如果Kestrel本身可以作为web服务器使用,可以直接处理传入的HTTP请求,那么我们为什么需要反向代理服务器呢

这是因为反向代理服务器提供了一个额外的配置和安全层,这是Kestrel服务器无法提供的。同样反向代理服务器,还维护着负载均衡。所以使用Kestrel服务器和反向代理服务器是一个很好的选择。

因此,当我们使用Kestrel服务器和反向代理服务器时,反向代理服务器将接收来自客户机的传入HTTP请求,然后将该请求转发到Kestrel服务器进行处理。一旦Kestrel服务器处理了该请求,它就会将响应发送回反向代理服务器,然后反向代理服务器通过internet将响应发送回被请求的客户机,如下图所示。

External Proxy Server with Internal Kestrel Server

在后面的文章中,我将介绍我们怎么把ASP.NET Core应用程序发布到IIS,并且把IIS作为一个反向代理服务器。

当我们直接,在Visual Studio中运行程序的时候,Visual Studio,默认使用的是IIS Express。现在我们可以改变项目文件:

<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>

由于我们已经配置了进程外托管模型,现在IIS Express充当反向代理服务器,而Kestrel充当内部web服务器。

现在,IIS Express接收传入的HTTP请求,然后将其转发到Kestrel Web服务器进行处理。Kestrel Web服务器处理请求并将响应发送回IIS Express,而IIS Express又将响应发送回客户机,即浏览器。

现在运行应用程序,您将看到工作进程为dotnet。因此,当您使用Out of Process Hosting模型时,Kestrel Web服务器将托管应用程序并处理请求,而不管您是否使用反向代理服务器。

还有一个很重要的需要记住:当你使用.NET Core CLI运行程序的时候,然后在默认情况下,它会忽略你在应用程序的项目文件中指定的主机设置,即csproj文件。在这种情况下,AspNetCoreHostingModel元素的值将被忽略

.NET Core CLI总是使用OutOfProcess托管模型,并且Kestrel是web服务器,它将会托管ASP.NET Core应用程序,并且处理HTTP请求。

我们可以不使用内置的Kestrel服务器运行ASP.NET Core应用程序么?

答案是肯定可以的,当我们使用InProcess hosting模型的时候,应用程序是托管在IIS进程中的也就是w3wp.exe或者iisexpress.exe中。这也就是意味着,在InProcess模型中,我们是没有使用Kestrel服务器的。

在下面的文章中,我将带领大家学习ASP.NET Core中的 launchSetting.json文件。这篇文章中,我已经详细介绍了OutOfProcess 托管模型,希望能帮到你。

posted @ 2020-04-05 18:25  灰太狼的梦想  阅读(1365)  评论(0编辑  收藏  举报