asp.net 4 具有自定义 urlrewrite 的 Webform 应用程序在 IIS 8 上失败

asp.net 4 Webform application with custom urlrewrite fails on IIS 8

我们有一些 ASP.NET 3.5 和 ASP.NET 4 个带有自定义 UrlRewrite 的网络表单网站,它们以编程方式映射 SEO 友好 urls (http://example.com/key/This-is-sample-text-in-url.html) to physical address (http://example.com/key.aspx)

这些网站在 IIS 6 中完美运行,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll for 3.5 和 c:\windows\microsoft.net\framework\v4.0.30319\aspnet_isapi.dll for 4.0 in application extension mapping window.

迁移到 windows 2012 后,所有 3.5 网站都使用经典的 .NET 3.5 AppPool 和处理程序部分中的以下声明:

  <remove name="ASP.Net-ISAPI-Wildcard" />
  <add name="ASP.Net-ISAPI-Wildcard" path="*"
  verb="*" type="" modules="IsapiModule"
  scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll"
  resourceType="Unspecified"
  requireAccess="None"
  allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv2.0,bitness64"
  responseBufferLimit="4194304" />

我希望使用相同的 Classic .NET 4.0 AppPool 和以下处理程序应该可以但没有:

  <remove name="ASP.Net-ISAPI-Wildcard" />
  <add name="ASP.Net-ISAPI-Wildcard" path="*"
  verb="*" type="" modules="IsapiModule"
  scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll"
  resourceType="Unspecified"
  requireAccess="None"
  allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness64"
  responseBufferLimit="4194304" />

我仍然收到 HTTP 错误 404.0 - 未找到
模块:IIS Web 核心
通知:MapRequestHandler
处理程序:静态文件
错误代码:0x80070002

我无法降级网站,也找不到任何有用的信息来查找错误来源。站点日志文件未提供任何详细信息,事件日志中没有错误。

我怀疑处理程序映射可能存在冲突,并尝试通过 Web.Config 禁用不相关或可疑的条目,但没有任何变化。 我不知道,但也许 ASP.Net-ISAPI-Wildcard 无法捕获请求,最终进程以 StaticFile 处理程序结束,尽管在有序列表中,ASP.Net-ISAPI-Wildcard 位于顶部并且StaticFile 是最后一个。

如果有人对此有解决方案,我将不胜感激。

p.s。在目标页面上方的示例中,即 url 到 (http://example.com/key.aspx)

已解决

这是为了防止有人遇到同样的情况

我添加的处理程序是正确的,但仅适用于 64 位应用程序,所以当我添加 32 位版本的处理程序时问题就解决了。因为我在配置管理器中设置了任何平台,所以我认为这可能不是平台问题。

  <remove name="ASP.Net-ISAPI-Wildcard" />
  <add name="ASP.Net-ISAPI-Wildcard" path="*"
  verb="*" type="" modules="IsapiModule"
  scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll"
  resourceType="Unspecified"
  requireAccess="None"
  allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness64"
  responseBufferLimit="4194304" />

  <remove name="ASP.Net-ISAPI-Wildcard-32" />
  <add name="ASP.Net-ISAPI-Wildcard-32" path="*"
  verb="*" type="" modules="IsapiModule"
  scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll"
  resourceType="Unspecified"
  requireAccess="None"
  allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness32"
  responseBufferLimit="4194304" />