我有一个在 .net 框架版本 4.0 上运行的 aspx.net 网站,该网站使用表单身份验证,除了系统中保存 Web 服务的一小部分外,已配置为所有人都可以访问(使用 web.config 文件中的位置设置)。
该应用程序安装在 Windows 2008 服务器 IIS7.5 上,具有自己的内存池,配置为 .NET 4.0。还配置了一个 DefaultAppPool,我最初将其配置为 .NET 2.0。
我正在调查运行我的一个 Web 服务时出现的问题,其中每次调用函数时都会返回 404 错误,我解决了这个问题,但是我注意到每当我收到错误时,返回错误的 .NET 版本都是 2.0 版,而不是 4.0 版,即它应该在其中运行的应用程序池的版本。我通过将 DefaultAppPool 的设置更改为 4.0 来确认此行为,然后该错误由适当的版本生成。
IIS 似乎已经决定应该使用哪个内存池,绕过我为 aspx.net 网站配置的内存池。
有没有其他人遇到过类似的问题,我是不是疯了,是否有隐藏在某处的配置选项可以解释这种行为?(即在machine.config中的某个地方)
答案1
不过,只有当出现错误时才会发生这种情况,并且错误代码为 404;这表明生成错误的请求不属于应用程序池所服务的命名空间。因为 404 表示未找到,这意味着 URL 不正确;心理调试告诉我们这不属于应用程序的 /path/ 。
如果默认网站在根目录下作为 DefaultAppPool 运行,则任何位于特定应用路径(在 Your40AppPool 中运行)之外的错误路由请求都将由 DefaultAppPool 提供服务。
Netsh http sh ser
将显示为每个应用程序池定义的 URL 命名空间(只需盯着它看一会儿,直到您掌握它)。如果任何请求针对映射到 Your40AppPool 的 /path/ 之外的任何内容,它将由在站点(或框)级别注册的任何内容提供服务,大多数情况下是 DefAppPool。