0

我在 .NET Framework 4.8 上有一个 asp.net 5 Web 应用程序,它作为带有 Windows Server 2019 容器映像的 azure 应用程序服务运行。我设置了一个诊断设置以将“AppServiceHTTPLogs”发送到事件中心,并且在检查日志时,我注意到经过身份验证的请求缺少 CsUsername 属性。

在本地或什至作为 Azure 容器实例运行相同的容器映像并检查容器上的 IIS 日志我可以看到用户名,因此这与作为日志不运行的应用服务运行时捕获 https 日志的方式和位置有关'不获取经过身份验证的主体的身份名称。

有没有其他人遇到过这个?我是否需要将主体公开为日志记录以获取它的响应标头?

更新:2022 年 2 月 24 日

除了在这里询问之外,我还启动了一个与 azure 支持有关的案例,询问为什么运行 Windows 容器的 Windows 应用服务计划上的 azure 应用服务中的 Web 服务器日志缺少 cs-username 信息,而正在安慰正在运行的容器应用服务并检查 C:\inetpub\logs\LogFiles\W3SVC1 中的 w3c 日志会显示 cs-username 值。

他们终于回过神来,说:

目前恐怕您设置的体系结构不支持此功能,获取 CsUsername 详细信息的唯一方法是部署 Linux 应用服务,然后将 Azure 存储帐户作为数据端点。

这对我一点帮助都没有,因为我无法在 Linux 应用服务计划中运行 .NET Framework 4.8 ASP.NET MVC 5 应用程序容器。通常,通过部署 Windows 容器以作为 azure 应用程序服务运行的考验,使用 Azure DevOps 管道将容器作为 azure 应用程序服务运行,我发现微软对运行基于 Windows 的容器的支持非常具有挑战性,而且没有太多持续性支持。他们试图推动 linux 托管环境,不幸的是,只有当您的架构基于 .NET 核心框架时,这才是一种选择。

4

1 回答 1

0

有没有其他人遇到过这个?我是否需要将主体公开为日志记录以获取它的响应标头?

此问题可以通过 2 种不同的方式解决,以下是解决步骤

A]直接更改 applicationHost.config

applicationHost.config使用以下步骤编辑高级日志记录功能的文件:

  • 在文本编辑器中打开 C:\Windows\System32\inetsrv\config\applicationHost.config 文件。
  • 找到该advancedLogging部分。
  • advancedLogging中,找到<field id='UserName'...>条目。

<field id="UserName" sourceName="UserName" sourceType="
 RequestHeader " logHeaderName="cs-username" category="Default" loggingDataType="TypeLPCSTR" />

  • 修改sourceType字段为BuiltIn,如下:

<field id="UserName" sourceName="UserName" sourceType="
 BuiltIn " logHeaderName="cs-username" category="Default" loggingDataType="TypeLPCSTR" />

B]通过 Appcmd.exe 更改 applicationHost.config

您可以使用 appcmd.exe 工具进行配置更改。

运行此命令:

appcmd.exe set config -section:system.webServer/advancedLogging/server
/fields.[id='UserName'].sourceType:"BuiltIn" /commit:apphost

有关完整信息,您可以通过下面提到的链接

高级日志记录中没有 cs-username 数据 - Internet Information Services | 微软文档

IIS 日志中未填充 cs-username · 问题 #6741 · dotnet/aspnetcore · GitHub

于 2022-02-17T07:50:52.157 回答