IIS 7、HttpHandler和HTTP错误500.21

16

在 IIS 7 上,我正在尝试为我的 ASP.NET Web 应用程序使用自定义 HttpHandler。我使用的管道模式是 "classic",.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,但是出现了相同的错误)。我在两个不同的服务器上尝试过,但得到了相同的结果。

还应该尝试什么?谢谢

7个回答

20

如果你想要运行IIS托管处理程序,那么就不可能在经典模式下进行配置。如果想要这样做,应该在集成模式下运行IIS。

关于模块、处理程序和IIS模式的更多信息,请参阅以下博客文章:

IIS 7.0、ASP.NET、管道、模块、处理程序和先决条件

对于处理程序,如果在映射中设置preCondition="integratedMode",则该处理程序仅在集成模式下运行。另一方面,如果设置preCondition="classicMode",则该处理程序仅在经典模式下运行。如果两者都省略,则处理程序可以在两种模式下运行,但对于托管处理程序来说不可能


26
我遇到了同样的问题。我的服务器使用的是Window Server 2008 R2和IIS 7.0。我打开以下文件夹c:\Windows\Microsoft.NET\Framework64\v4.0.30319\并运行以下命令aspnet_regiis -i,然后问题就解决了。 - nvtthang
我也执行了aspnet_regiis,它起作用了 :) 感谢@nvtthang - Imran Rizvi
我进入文件夹c:\Windows\Microsoft.NET\Framework64\v4.0.30319\并运行命令aspnet_regiis -i,然后问题得到解决。 - Gautam Sharma
非常感谢!一旦我设置了siteManager.AppPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;,它就起作用了。 - Lin Song Yang

13

幸运的是,这个问题很容易解决。从提升权限的命令提示符中运行以下命令:

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

如果您使用的是32位机器,则可能需要使用以下内容:

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

如果我删除了 .exe,这对我才起作用。 我不知道为什么。 - shubniggurath
我在Win 7 Pro上也成功了。必须以管理员身份运行命令提示符。 - Giorgos Betsos
2
这是做什么的? - Dan Lenski

10

我曾经遇到过同样的问题,通过在运行中执行以下命令解决:

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


1
对我也起作用了,但我完全不知道为什么。@Paul Gathuo Wagana,你能解释一下这个神奇的命令实际上是做什么的吗? - Dan Lenski

4

我之前也遇到了同样的问题,但现在已经解决了。我在stackoverflow上发布了我的问题:

无法将PUT请求发送到我的IHttpHandler,GET请求正常

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

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

如果您在使用PUT动词时遇到问题,并且已安装了WebDAV,则希望此解决方案可以解决您的问题。


0
在 Windows Server 2016 上,我使用了以下命令: dism /online /enable-feature /featurename:IIS-ASPNET45 /all
也可以通过 Powershell 完成: Install-WindowsFeature .NET-Framework-45-Features

0

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

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

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

-1
我找到的一个解决方案是,您应该右键单击在应用程序池下管理的站点,并从高级设置中将.NET Framework更改回v2.0。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接