进程内和进程外托管的 ASP .NET Core 3 + Identity Server 问题
Posted
技术标签:
【中文标题】进程内和进程外托管的 ASP .NET Core 3 + Identity Server 问题【英文标题】:ASP .NET Core 3 + Identity Server issue with in-process and out-of-process hosting 【发布时间】:2020-03-07 05:18:30 【问题描述】:我们目前正在尝试上传两个 ASP .NET Core 3 简单的 Web 应用程序。
一个是生成令牌的 IdentityServer4 应用程序,而另一个有一些 API 端点,并依赖第一个进行身份验证。
我们需要将它们都发布在有其他应用程序的同一个应用程序池下,因为我们有一个 https 证书。我们已经安装了 asp net core 3 托管套件。
仅上传一个身份验证应用程序就可以正常工作。上传它们都会在访问第二个时生成错误500.35 ANCM Multiple In-Process Applications in same Process。 This error's description is quite clear(好像我们不能在同一个池中托管两个进程内应用程序),所以我们尝试将这两个应用程序配置为 OutOfProcess,通过将以下行添加到我们的 .csproj 文件中
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
根据我的阅读,这应该在我们的 IIS 和调用者之间插入一个 Kestrel Web 服务器。但是现在,对于他们两个,我们得到的错误都是502.5 - ANCM Out-Of-Process Startup Failure。
我在任何地方都没有找到任何日志,除了 Window 的事件日志,它报告了这个失败:
物理根目录为“C:\inetpub\wwwroot\XXX\”的应用程序“/LM/W3SVC/1/ROOT/XXXXX”无法使用命令行“dotnet.\XXXXXXXXX.dll”启动进程并重试多次.无法绑定到端口“10352”。多次重试捕获的 stdout 和 stderr 日志的前 30KB 字符:
仅此而已。
在这一点上,任何想法都会非常感激。 :)
谢谢大家,祝你有美好的一天。
【问题讨论】:
为什么你需要为多个应用程序使用同一个应用程序池?如果您使用进程外托管,则每个实例无论如何都会产生自己的进程。 HTTPS 证书与此有什么关系? 一个简单的问题,为什么它们必须在同一个池中? @poke 我们的 IT 经理告诉我,在 IIS 上拥有另一个应用程序池意味着要购买和上传另一个带有另一个 HTTPS 证书的子域。他错了吗? 所以您想在同一个主机名/域上托管多个应用程序,但使用不同的虚拟路径? 好的,我为每个应用程序创建了一个应用程序池,它现在可以工作了。不需要另一个子域和证书。 :) 谢谢你们的帮助! 【参考方案1】:感谢@poke 和@Ygalbel 提供的一个想法,我质疑我被告知的关于同一域下的所有内容只有一个应用程序池的限制,并制作了两个不同的应用程序池。它现在完美无缺。 :)
【讨论】:
【参考方案2】:<aspNetCore
processPath="dotnet"
arguments=".\ISX_IQ.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess" />
在 web.config 中将 hostingModel
从 inprocess
更改为 OutOfprocess
<aspNetCore
processPath="dotnet"
arguments=".\ISX_IQ.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="OutOfprocess" />
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于进程内和进程外托管的 ASP .NET Core 3 + Identity Server 问题的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 错误 500.0 - Dot net core 3.1 中的 ASP.NET Core IIS 托管失败(进程中)