首页 > 解决方案 > 为什么 w3wp.exe 会通过我的 dotnetcore api 路径查找 web.config?

问题描述

在应用程序池中单独使用 IIS 7 和部署的 dotnetcore 2.1 或 3.1 Web API,我们在查看服务器上的进程监视器时发现,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”,但希望能节省一些时间。

标签: iis.net-coreweb-config

解决方案


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

  1. 转到配置编辑器 转到配置编辑器

  2. 转到 system.applicationHost => 站点 => 虚拟目录默认值 在此处输入图像描述

  3. 将 allowSubDirConfig 设置为 False

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

跳过额外的文件操作可以显着提高具有大量随机访问静态内容的网站的性能。

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

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

与 MVC 相关的问题: ASP.NET MVC 安全性和 IIS allowSubDirConfig 配置


推荐阅读