为什么 w3wp.exe 通过我的 dotnetcore api 路径查找 web.config?

Why is w3wp.exe looking through my dotnetcore api path to find web.config?

在应用程序池中单独使用 IIS 7 和已部署的 dotnetcore 2.1 或 3.1 web API,我们在查看服务器上的 Process Monitor 时发现,w3wp.exe 工作人员记录了许多错误,其中他们显然在寻找 web.config。他们检查了 api 路线中的每条路线。预期的行为是 w3wp.exe(一个 IIS 工作者)会将请求“移交”到 dotnetcore 应用程序的路由,这会找到端点,但相反,它似乎也在检查 web.config.进程监视器显示 w3wp.exe QueryOpen NAME NOT FOUND 和 PATH NOT FOUND 错误。

我看了几篇文章后得出结论,这是 web.config 继承的问题,IIS 中一定有一些设置或 dotnetcore 配置规定了检查每个 API 的行为路由路径就好像它是一个可能包含新的 web.config 的虚拟目录文件夹系统。这样做的好处是您可以在子应用程序中拥有不同的 web.config,但我们不想要这样的好处,我们也不希望这些 IIS 工作人员整天用成千上万的错误来破坏日志.我们找到了一个非常简单的解决方案,IIS 管理员可能会说“duh”,但希望能节省一些时间。

我们在旧 blog.iis.net post 上找到了关于 web.config 继承 (https://blogs.iis.net/steveschofield/control-web-config-inheritance-with-iis-7-asp-net-options) 的答案。有一个名为 allowsubdirconfig 的配置指示 w3wp.exe worker 检查子目录中是否有 web.config 文件。以下是在 IIS applicationhost.config 中更改它的方法,可通过 IIS 管理器找到:

  1. 转到配置编辑器

  2. 转到system.applicationHost => 站点 => 虚拟目录默认值

  3. 将 allowSubDirConfig 设置为 False

我们还发现 Microsoft 建议您使用此设置在 IIS 上托管 dotnetcore 应用程序

Skipping the additional file operations can significantly improve performance of websites that have a very large set of randomly accessed static content.

https://docs.microsoft.com/en-us/previous-versions//dn529134(v=vs.85)?redirectedfrom=MSDN

请记住,如果您使用此设置,则需要想出一个解决方案来区分使用或不使用该设置的应用程序。

与 MVC 相关的问题: