16

在 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,但同样的错误)。我在两台不同的服务器上尝试过,但得到了相同的结果。

我还应该尝试什么?谢谢

4

7 回答 7

19

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

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

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

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

于 2012-08-22T09:53:55.640 回答
13

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

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

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

%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
于 2016-07-14T14:26:32.680 回答
10

我有同样的问题,并通过在运行中运行以下解决

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

于 2016-12-01T15:22:30.210 回答
3

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

无法 PUT 到我的 IHttpHandler,GET 工作正常

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

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

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

于 2015-10-22T21:06:55.410 回答
1

在 Windows Server 2016 上,我使用过:

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

也可以通过 Powershell 完成:

Install-WindowsFeature .NET-Framework-45-Features

于 2017-10-10T10:58:28.500 回答
0

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

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

%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
于 2018-04-16T11:14:14.737 回答
-1

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

于 2014-06-17T12:44:50.547 回答