【问题标题】:IIS 7, HttpHandler and HTTP Error 500.21IIS 7、HttpHandler 和 HTTP 错误 500.21
【发布时间】:2012-08-17 15:47:04
【问题描述】:

在 IIS 7 上,我正在尝试为我的 ASP.NET Web 应用程序使用自定义 HttpHandler。我使用管道模式“经典”,.NET 版本是 4.0.30319,我的处理程序的 web.config 配置是:

<system.webServer>
<handlers>
    <add name="MyHandler" path="*.myExtension" verb="*" type="Company.App.UI.Controls.MyHandler, Company.App.UI" resourceType="Unspecified" />
</handlers>
</system.webServer> 

当我调用这个处理程序时,我得到这个错误:

HTTP Error 500.21 - Internal Server Error
Handler "MyHandler" has a bad module "ManagedPipelineHandler" in its module list

我进行了谷歌搜索,大多数人通过使用 aspnet_regiis.exe /i 命令重新注册 ASP.NET 来解决此问题,但这对我工作(命令完成,我重新启动 IIS,但同样的错误)。我在两台不同的服务器上尝试过,但得到了相同的结果。

我还应该尝试什么?谢谢

【问题讨论】:

    标签: asp.net iis iis-7 httphandler ihttphandler


    【解决方案1】:

    无法将 IIS 托管处理程序配置为在经典模式下运行。如果你想这样做,你应该在集成模式下运行 IIS。

    您可以在以下博客文章中了解有关模块、处理程序和 IIS 模式的更多信息:

    IIS 7.0, ASP.NET, pipelines, modules, handlers, and preconditions

    对于处理程序,如果您在 映射,处理程序将仅在集成模式下运行。在 另一方面,如果您设置 preCondition="classicMode" 处理程序将 仅在经典模式下运行。 如果你忽略这两个,处理程序 可以在两种模式下运行,尽管这对于托管 处理程序

    【讨论】:

    • 我遇到了同样的问题。我的服务器使用的是 Window server 2008 R2, IIS 7.0。我来到这个文件夹 c:\Windows\Microsoft.NET\Framework64\v4.0.30319\ 并运行这个命令 aspnet_regiis -i 然后问题就解决了。
    • 我也做了 aspnet_regiis 并且成功了 :) 谢谢@nvtthang
    • 我来到这个文件夹 c:\Windows\Microsoft.NET\Framework64\v4.0.30319\ 运行这个命令 aspnet_regiis -i 然后问题就解决了
    • 非常感谢!!只要我设置了 siteManager.AppPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
    【解决方案2】:

    我发现的一个解决方案是,您应该通过在高级设置中的应用程序池下右键单击您拥有管理器的站点,将 .Net Framework 更改回 v2.0。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,刚刚解决了。我在stackoverflow上发布了我自己的问题:

      Can't PUT to my IHttpHandler, GET works fine

      解决方案是在 modules 元素中将 runManagedModulesForWebDavRequests 设置为 true。我的猜测是,一旦你安装了 WebDAV,那么所有的 PUT 请求都与它相关联。如果您需要 PUT 转到您的处理程序,则需要删除 WebDAV 模块并将此属性设置为 true。

      <modules runManagedModulesForWebDavRequests="true">
      ...
      </modules>
      

      因此,如果您在使用 PUT 动词时遇到问题并且您已经安装了 WebDAV,那么希望此解决方案能够解决您的问题。

      【讨论】:

      • 你拯救了我的一天!
      【解决方案4】:

      幸运的是,这很容易解决。从提升的命令提示符运行以下命令:

      %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
      

      如果您使用的是 32 位计算机,则可能必须使用以下内容:

      %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
      

      【讨论】:

      • 这只有在我删除了我不知道为什么的 .exe 时才对我有用。
      • 它在 Win 7 Pro 机器上也适用于我。必须以管理员身份运行命令提示符。
      • 这是做什么的?
      【解决方案5】:

      我遇到了同样的问题,通过在运行中运行以下解决了

      %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i

      【讨论】:

      • 也为我工作,但我不知道为什么。 @Paul Gathuo Wagana,你能解释一下这个神奇的命令实际上做了什么吗?
      【解决方案6】:

      在 windows server 2016 上我使用过:

      dism /online /enable-feature /featurename:IIS-ASPNET45 /all

      也可以通过 Powershell 完成:

      Install-WindowsFeature .NET-Framework-45-Features

      【讨论】:

        【解决方案7】:

        出现这种情况是因为你没有安装/启动 ASP.net 的服务。

        在 Windows 7、8、10 中使用以下命令。

        %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-13
          • 2013-02-08
          • 1970-01-01
          • 1970-01-01
          • 2010-11-30
          • 2013-03-18
          • 1970-01-01
          相关资源
          最近更新 更多