You need to enable JavaScript to run this app. 多Blazor应用部署同IIS应用池报500.35错误 求替代解决方案
优惠活动
大模型
产品
解决方案
定价
更多

多Blazor应用部署同IIS应用池报500.35错误 求替代解决方案

解决方案

根本原因说明

你遇到的报错本质是ASP.NET Core默认的*进程内(InProcess)*托管模型限制:同一个IIS工作进程(w3wp.exe)中仅允许加载一个.NET Core运行时实例,同应用池下部署多个进程内托管的.NET Core/5+应用时,会出现运行时加载冲突。

可行方案(无需创建独立应用池)

方案1:统一修改所有应用为进程外(OutOfProcess)托管(最推荐)

该方案将原本运行在IIS工作进程内的应用改为独立的Kestrel进程运行,IIS的ANCM模块仅作为反向代理转发请求,同一个应用池下可以共存多个独立的Kestrel进程,完全规避运行时冲突,不需要调整现有IIS应用池架构。
修改方式有两种,二选一即可:

  • 项目发布前修改:在每个Blazor应用的.csproj项目文件的PropertyGroup节点中添加如下配置,重新发布即可:
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
  • 服务器端直接修改:无需重新发布,逐个修改每个应用根目录下的web.config文件,找到aspNetCore节点,添加hostingModel="OutOfProcess"属性,示例如下:
<aspNetCore 
    processPath="dotnet" 
    arguments=".\你的应用名称.dll" 
    hostingModel="OutOfProcess"
    stdoutLogEnabled="false" 
    stdoutLogFile=".\logs\stdout" />

注意:必须将同应用池下所有.NET 5+应用都修改为进程外托管,再回收对应应用池即可生效,只要有一个应用仍为进程内托管就会触发冲突。

方案2:合并多个应用为单个宿主应用

如果你的多个Blazor应用业务关联度较高,可以将所有应用改造为同一宿主下的不同模块,通过区域(Area)、虚拟路径路由区分不同业务应用,本质上是单个ASP.NET Core应用,天然支持运行在单个应用池中。该方案需要调整代码架构,改造成本高于方案1。

补充说明

进程外托管的性能损耗极低,仅存在IIS反向代理的微小开销,绝大多数业务场景下和进程内托管的性能差异可忽略,完全可以支撑50个应用的正常运行。
如果后续仍然考虑拆分应用池,可开启应用池的闲置超时自动回收配置,闲置的应用池几乎不会占用过多系统资源,50个低并发应用的资源总占用也远低于预估。

内容的提问来源于stack exchange,提问作者CuriousCarnivore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 04:24:03