【问题标题】:Unable to switch from InProcess to OutOfProcess ASP.NET Core hosting mode in ASP.NET Core 3.1无法在 ASP.NET Core 3.1 中从 InProcess 切换到 OutOfProcess ASP.NET Core 托管模式
【发布时间】:2020-02-27 13:35:18
【问题描述】:

作为测试的一部分(将 Windows 身份验证与 JWT 身份验证混合),我想看看我的应用程序在使用 OutOfProcess 托管模式时的行为。查看我发布的输出,我发现唯一的区别在于 web.config 中的 aspNetCore 标记(将 hostingModel 设置为 InProcess 或 OutOfProcess)。

但是,当我将值从 InProcess 更改为 OutOfProcess 并重新启动网站并查看我发出请求时返回的标头时,我在两种情况下都会看到以下标头

服务器:Microsoft-IIS/10.0

因此,我的结论是,进程外托管不会像我自己托管时那样获得 Kestrel

服务器:红隼

那么,我错过了什么?

【问题讨论】:

  • 在 IIS 上托管时,在进程中或进程外,Server 标头应反映 IIS(IIS 是与浏览器通信的实际服务器)。在这种情况下,您永远不应该期望 Kestrel。

标签: asp.net-core iis


【解决方案1】:

据我所知,如果将托管模式设置为 OutOfProcess,则响应标头将变为 Kestrel。我在我这边创建了一个测试演示,它运行良好。您能否发布有关自托管或框架依赖项的更多详细信息。

我的 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>

结果:

【讨论】:

  • 当我从头开始创建一个重现项目,将所有内容保留为默认值(新的 .NET Core 3.11 ASP.NET API 项目,发布到文件夹并部署在我的 IIS 上)时,我看到了正确的行为。我的 web.config 与您的匹配(当然参数除外),我只有 stdoutLogEnabled = true。我在 system.webServers 中有这个附加部分,因为我需要 windows auth
  • 有趣的是,如果我删除了安全部分,事情就开始起作用了。我的 appconfig.json 需要一些额外的工作(如果配置了 Kestrel 似乎正在使用它们的 url,所以我不得不删除它们),但我现在将 Kestrel 视为服务器标头而不是 IIS。
猜你喜欢
  • 2021-06-11
  • 2020-02-14
  • 2023-03-17
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2021-01-15
相关资源
最近更新 更多