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,我们需要在项目文件中加入下面的代码:

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

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

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

方式一:

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

方式二

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

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

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

在后面的文章中,我将介绍我们怎么把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 托管模型,希望能帮到你。

(0)

相关推荐

  • 10.ASP.NET Core launchSettings.json file

    这篇文章,我将带领大家学习ASP.NET Core中的launchSettings.json文件.为了学习它,我们打开之前建的空白模板的ASP.NET Core项目. 从上面的图片中你可以看到,我们项 ...

  • Windows平台部署Asp.Net Core应用

    一. 简介 Asp.Net Core 部署方式有两种:依赖框架和独立部署. 1. 框架依赖的部署: 顾名思义,依赖框架的部署 (FDD) 依赖目标系统上存在共享系统级版本的 .NET Core. 由于 ...

  • 如何在 ASP.Net Core 中使用 HTTP.sys WebServer ?

    dotNET跨平台 今天 以下文章来源于码农读书 ,作者码农读书 ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,大家都知道 Kestrel 是 A ...

  • IIS 简介

    表白:黑白圣堂血天使,天剑鬼刀阿修罗.  讲解对象:/IIS 简介 作者:融水公子 rsgz http://www.rsgz.top/ IIS 简介 中文名:Internet信息服务 全称:Inter ...

  • Asp.net Core Kestrel 免费实现https

    0.概述 先了解下https是个啥: https://www.bilibili.com/video/BV1j7411H7vV so!只要给我们的web服务器配置一个证书就行了,证书可以买,也可以用免费 ...

  • 安装IIS-web服务器

    表白: 只愿君心似我心   讲解对象:安装IIS-web服务器  作者:融水公子 rsgz 在安装软件之前我们需要配置好静态IP这步非常的简单. 安装软件步骤 我的电脑--光驱--安装可选择的wind ...

  • 深入探究ASP.NET Core读取Request.Body的正确方式

    dotNET跨平台 今天 以下文章来源于yi念之间 ,作者yi念之间 前言 相信大家在使用ASP.NET Core进行开发的时候,肯定会涉及到读取Request.Body的场景,毕竟我们大部分的POS ...

  • ML.NET 示例:对象检测-ASP.NET Core Web和WPF桌面示例

    dotNET跨平台 今天以下文章来源于My IO ,作者My IO My IO记录工作和生活,将输入变成输出ML.NET 版本API 类型状态应用程序类型数据类型场景机器学习任务算法v1.5.0动态A ...

  • NET问答: 如何给 ASP.NET Core 配置指定端口 ?

    今天 以下文章来源于NET技术问答 ,作者Stackoverflow NET技术问答精选 StackOverFlow 上的.NET 相关技术问题解答 咨询区 Drew Noakes: 我是 ASP.N ...

  • 如何解决在ASP.NET Core中找不到图像时设置默认图像

    dotNET跨平台 今天 以下文章来源于UP技术控 ,作者conan5566 UP技术控不止IT 还有生活 背景 web上如果图片不存在一般是打xx,这时候一般都是会设置默认的图片代替.现在用中间件的 ...

  • 使用ASP .NET Core Razor页面,Web API和实体框架进行分页和排序

      如何实现分页和排序以产生良好的性能     如何使用.NETCoreRazor页面,WebAPI和实体框架实现分页和排序以产生良好的性能.     该项目的特点是:     选择页面大小     ...

  • 如何使用页面渲染,TypeScript和“ require”创建ASP.NET Core API项目

    我创建了一个ASP.NETCoreWebAPI项目而不是ASP.NETCoreWebApp项目,因为我正在实现一个API,而不是Web应用程序.但是,我的API包含用于管理和测试API函数的默认页面, ...

  • ASP.Net 管道模型 VS Asp.Net Core 管道 总结

    dotNET跨平台 今天 1 管道模型 1 Asp.Net Web Form管道 请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象,封装此次请求有关的所有信息,然后进入H ...

  • .NET 6 Preview 3 中 ASP.NET Core 的更新和改进

    原文:bit.ly/2Qb56NP作者:Daniel Roth译者:精致码农-王亮.NET 6 预览版 3 现已推出,其中包括许多对新的 ASP.NET Core 改进.以下是本次预览版的新内容:更小 ...

  • 一图看懂 ASP.NET Core 中的服务生命周期

    dotNET跨平台 今天 以下文章来源于技术译站 ,作者技术译民 翻译自 Waqas Anwar 2020年11月8日的文章 <ASP.NET Core Service Lifetimes (I ...