7.ASP.NET Core InProcess Hosting

本文详细介绍了ASP.NET Core的InProcess Hosting模型,包括CreateDefaultBuilder方法的任务、InProcess Hosting的工作原理以及如何配置。在InProcess托管中,IIS直接与ASP.NET Core应用程序在同一进程中运行,提供更高的请求吞吐量。Kestrel作为内部服务器在OutOfProcess托管中使用,而在InProcess托管中则由IIS直接处理,减少了通信开销。文章还探讨了IISExpress和生产环境中IIS的使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章,我们一起学习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托管模型。希望能帮到你!

<think>我们正在处理一个关于在IIS上托管.NET9 API时遇到的HTTP错误500.30(ASP.NETCore应用程序启动失败)的问题。根据引用内容,我们可以得到一些线索:引用[1]提到将web.config文件中的hostingModel="inprocess"改为"OutOfProcess"或删除该属性。引用[2]提到检查是否安装了.NET6环境,并查看事件日志以及给Everyone用户授权。注意:用户的问题是关于.NET9 API,而引用中提到了.NET6。我们需要考虑.NET9的类似情况,因为.NET9是最新的,可能环境配置类似。步骤:1.检查web.config文件:在IIS中托管ASP.NET Core应用时,web.config文件中的hostingModel设置很重要。如果设置为"InProcess"(进程内托管),但环境配置不正确,可能导致启动失败。可以尝试改为"OutOfProcess"(进程外托管)。2.检查运行时环境:确保服务器上已经安装了.NET9运行时(或更高版本,具体取决于项目目标框架)。如果没有安装,需要下载并安装。3.检查事件日志:在Windows事件查看器的应用程序日志中查找详细错误信息,这有助于定位问题。4.权限问题:确保应用程序池的标识用户(或Everyone,但更推荐使用应用程序池标识)对发布文件夹有适当的读写权限。此外,可能还有其他原因,如缺少依赖项、端口冲突等,但上述步骤是常见解决方案。因此,我们将按照以下步骤为用户提供解决方案:</think>### 解决 IIS 托管 .NET 9 API 的 HTTP Error 500.30 问题 HTTP Error 500.30 表示 ASP.NET Core 应用程序在 IIS 中启动失败。以下是系统性的解决方案: #### 1. **修改托管模式** ```xml <!-- 修改 web.config 文件 --> <aspNetCore processPath="dotnet" arguments=".\YourApp.dll" hostingModel="OutOfProcess" <!-- 关键修改 --> stdoutLogEnabled="true" /> ``` - **原因**:`InProcess` 模式要求 IIS 与 .NET 运行时严格匹配,.NET 9 可能不兼容 - **操作**:将 `hostingModel` 改为 `OutOfProcess` 或直接删除该属性[^1] #### 2. **验证运行时环境** ```powershell # 检查已安装的运行时 dotnet --list-runtimes ``` - 确保服务器安装 **.NET 9 运行时** - 下载地址:[.NET 9 Runtime](https://dotnet.microsoft.com/download/dotnet/9.0) #### 3. **检查权限设置** - 在 IIS 中右键点击应用 → **编辑权限** → **安全** 选项卡 - 添加 `IIS_IUSRS` `IUSR` 的完全控制权限 - 发布文件夹授予 `Everyone` 读取/执行权限(临时调试用)[^2] #### 4. **查看详细日志** - **事件查看器**:`Windows 日志 > 应用程序` 查找 .NET 错误事件 - **启用 stdout 日志**: ```xml <aspNetCore ... stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" /> ``` - 日志路径:应用根目录下的 `logs` 文件夹 #### 5. **其他关键检查** - **应用池配置**: - .NET CLR 版本设置为 **无托管代码** - 标识改为 **ApplicationPoolIdentity** - **端口冲突**:检查 `launchSettings.json` 与 IIS 绑定端口是否冲突 - **依赖缺失**:在服务器执行 `dotnet restore` #### 6. **部署验证** ```powershell # 在服务器手动测试应用 cd /d C:\inetpub\your-app dotnet YourApp.dll ``` - 若控制台运行成功,问题在 IIS 配置 - 若失败,检查项目依赖运行时 > **注意**:.NET 9 是最新版本,需确保 IIS 模块 `AspNetCoreModuleV2` 已更新。可通过 [安装 Hosting Bundle](https://dotnet.microsoft.com/download/dotnet/9.0) 解决。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值