Asp.net core 无法在ASP.NET Core 3.1中从进程内切换到进程外ASP.NET Core托管模式
作为测试的一部分(混合Windows auth和JWT auth),我想看看我的应用程序如何使用进程外托管模式运行。查看我发布的输出,我发现唯一的区别是aspNetCore标记中的web.config(将hostingModel设置为InProcess或OutOfProcess) 但是,当我将值从InProcess更改为OutOfProcess,并重新启动网站,查看发出请求时返回的头时,我在这两种情况下都会看到下面的头 服务器:Microsoft IIS/10.0 因此,我的结论是进程外托管不像我自己托管时那样应该得到红隼 服务员:红隼Asp.net core 无法在ASP.NET Core 3.1中从进程内切换到进程外ASP.NET Core托管模式,asp.net-core,iis,Asp.net Core,Iis,作为测试的一部分(混合Windows auth和JWT auth),我想看看我的应用程序如何使用进程外托管模式运行。查看我发布的输出,我发现唯一的区别是aspNetCore标记中的web.config(将hostingModel设置为InProcess或OutOfProcess) 但是,当我将值从InProcess更改为OutOfProcess,并重新启动网站,查看发出请求时返回的头时,我在这两种情况下都会看到下面的头 服务器:Microsoft IIS/10.0 因此,我的结论是进程外托管不像
那么,我遗漏了什么呢?据我所知,如果您将主机模式设置为OutOfProcess,则响应头将变成红隼。我已经在我这边创建了一个测试演示,效果很好。请发布更多关于自主机或框架依赖关系的详细信息 My web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\donet.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess" />
</system.webServer>
</location>
</configuration>
在IIS上托管时,无论进程中还是进程外,服务器头都应反映IIS(IIS是与浏览器对话的实际服务器)。在这种情况下,你永远不应该指望Kestrel。当我从头开始创建一个复制项目,保留所有默认设置(新的.NET Core 3.11 ASP.NET API项目,发布到文件夹并在我的IIS上部署)时,我看到了正确的行为。我的web.config与您的匹配(当然参数除外),我只有stdoutLogEnabled=true。我在system.webserver中有这个附加部分,因为我需要windows身份验证。有趣的是,如果我删除了安全部分,事情就开始起作用了。我的appconfig.json需要做一些额外的工作(如果配置了Kestrel,则似乎要使用它们的URL,因此我必须删除它们),但我现在将Kestrel视为服务器头,而不是IIS。