500.21错误:其模块列表中的“ManagedPipelineHandler”模块有问题

86

我遇到了错误:

HTTP 错误 500.21 - 内部服务器错误 处理程序 "CloudConnectHandler" 在其模块列表中具有错误的模块 "ManagedPipelineHandler"

我的 web.config 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="CloudConnectHandler" verb="*" path="CloudConnect.aspx" type="CloudConnectHandler" resourceType="Unspecified" />
    </handlers>
  </system.webServer>
  <system.web>
    <customErrors mode="Off" />
    <compilation debug="true" targetFramework="4.0" batch="false">
      <assemblies>
        <add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
      </assemblies>
    </compilation>
    <pages>
      <controls>
        <add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" />
      </controls>
    </pages>
        <identity impersonate="true" />
        <authentication mode="Forms" />
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <providerOption name="CompilerVersion" value="v4.0" />
        <providerOption name="WarnAsError" value="false" />
      </compiler>
    </compilers>
  </system.codedom>
  <appSettings>
    <add key="CloudConnectAuthorization" value="xxxx" />
    <add key="ConnectionInfo" value="xxxx" />
    <add key="ConnectionString" value="xxxx" />
    <add key="DefaultChannel" value="xxxx" />
    <add key="LoginValidationConnectionString" value="xxxx" />
  </appSettings>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="protobuf-net" publicKeyToken="257b51d87d2e4d67" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.640" newVersion="2.0.0.640" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

有很多建议表明asp.net没有正确安装。通常的解决方法是运行:

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
或者
%windir%\Microsoft.NET\Framework\v4.0.21006\aspnet_regiis.exe -i

我已经运行了两个,没有出现任何错误。 我已经重新启动了IIS,但问题仍然存在。该站点正在使用应用程序池。应用程序池已启动,.net框架= 4.0,托管管道=经典,标识= LocalSystem。

我花了几个小时来尝试找出问题所在。我希望有人能够帮助。


我不得不添加属性<add requireAccess="Read" ...>来解决我遇到的500.21错误。 - Brain2000
12个回答

187

请按照以下步骤操作:

1)以管理员身份运行命令提示符。

2)在命令提示符中输入以下两行中的任意一行:

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

2
欢迎来到SO并感谢您的回答。由于您的回答过于简短,它已被标记为待审核。虽然您的回答在技术上可能是正确的,但如果能加入更多的文字来解释OP所遇到的潜在问题以及您的回答如何解决这些问题,那将会更好。 - Software Engineer
8
这里还有更多的文本。因为它有效,所以我觉得真正的原因是如果你先安装4.5.1,然后再安装IIS,它不会自动识别正确的版本。或者我把顺序搞反了。无论哪种方式,这对我来说都有效。 - hubson bropa
4
我正在构建一个新的2008 R2服务器(是的,在2015年),我先安装了4.5.x,然后再安装IIS。就像@hubsonBropa在他的评论中提到的那样。这让我跨过了众多障碍之一。 - bkwdesign
如果您正在使用.NET 4.5.x或4.6.x,请不要被提到4.0的答案所迷惑,认为它不适用于您。这个问题可能与在IIS之前安装.NET的顺序有关,就像我的情况一样。即使我的应用程序使用.NET 4.5.2,运行命令(在我的情况下是64位版本)也可以解决它。 - Coxy
为什么我总是反复做同样的事情?!?!: 在墙上撞了几个小时的头 然后 去查看stackoverflow,然后回到工作中...白痴。 - Jester
显示剩余2条评论

51

我在一个全新的Windows Server 2012 R2上遇到了这个错误。已经安装了IIS和.NET 4.5,但是ASP.NET服务器角色(我的情况下是版本4.5)尚未添加。请确保您需要的ASP.NET版本已被添加/安装,如此截图所示,例如像ASP.NET 4.5。

ASP.NET服务器角色


现在是ASP.NET 4.7(Svr 2016)版本。 - bendecko

33
为了解决这个问题,我尝试运行以下命令:

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

然而,它对我没有用。我不得不在CMD窗口中以管理员身份运行另一个命令行。以下是该命令:

dism /online /enable-feature /featurename:IIS-ASPNET45
或者

dism /online /enable-feature /featurename:IIS-ASPNET45 /all
希望能对你有所帮助。

这对我也解决了问题,我使用的是Windows 10预览版10074和IIS 10。 - Shawn McGough
3
在去掉开头的百分号后,dism命令对我起了作用。所以我运行了以下命令: dism /online /enable-feature /featurename:IIS-ASPNET45 /all - Schmalls
1
适用于Windows Server 2016!非常感谢! - Adrian Księżarczyk

19

我已经将它切换到集成模式,这导致了一个不同的错误。一旦我修复了它,一切都开始正常工作了。谢谢。 - George Mastros
为此进行“踩”操作。我已经启用了集成模式。@Armaan的回答简洁而完美。 - echology
这个答案是正确的,它解决了我的问题。我使用了.NET 3.5并且遇到了500.21错误。切换到集成模式解决了我的问题。 - freedeveloper

4

我在Windows Server 2012 R2上的ASP.Net 4.5应用程序中出现了这个错误。

转到开始菜单-> "打开或关闭Windows功能"。出现一个向导。

点击下一步到服务器角色。

我必须勾选位于Web服务器IIS-> Web服务器-> 应用程序开发下面的以下选项,才能使其正常工作(这些选项基于Jeremy Cook的答案):

enter image description here

然后点击下一步到功能,确保勾选以下内容:

enter image description here

然后点击下一步安装。此时,该错误对我而言已消失。祝好运!


3
这是因为IIS 7同时使用了<system.web><httpHandlers><system.webServer><handlers>中的http处理程序。如果你的应用程序需要CloudConnectHandler,你应该在<system.web>中添加<httpHandlers>部分,并包含这个处理程序。
<httpHandlers>
    <add verb="*" path="CloudConnect.aspx" type="CloudConnectHandler" />
</httpHandlers>

并在<system.webServer>中的处理程序中添加preCondition属性:

<handlers>
  <add name="CloudConnectHandler" verb="*" path="CloudConnect.aspx" type="CloudConnectHandler" preCondition="integratedMode" />
</handlers>

希望能帮到您。


3

我在Windows 10中遇到了这个问题,需要使用IIS而不是IIS Express。新的Web项目出现了OP报告的错误。修复方法如下:

控制面板 > 打开或关闭Windows功能 > Internet信息服务 > 万维网服务 > 应用程序开发功能

选择 ASP.NET 4.7 (以我的情况为例)进行勾选。


2
对我来说,当使用PUTDELETE到WebAPI时,我遇到了这个错误消息。我也尝试按建议重新注册.NET Framework,但没有用。

我通过禁用我的单独应用程序池的WebDAV来解决这个问题,这样在使用PUTDELETE时就不会出现“坏模块”错误。

禁用单个应用程序池的WebDAV:

  1. 单击受影响的应用程序池
  2. 在列表中找到WebDAV Authoring Tools
  3. 单击以打开它
  4. 单击右上角的Disable WebDAV

我找到了这个链接上的说明,但它并不是很清楚。


1
我的问题也是这样。启用WebDav后,Put和Delete无法正常工作。感谢您分享您的发现! - ilter

0
每次我使用MSDeploy部署新网站或更新现有网站时,都会遇到这个问题。
我通过使用以下语法的MSDeploy卸载应用程序域来解决了这个问题:
msdeploy.exe -verb:sync -source:recycleApp -dest:recycleApp="Default Web Site/myAppName",recycleMode=UnloadAppDomain

您还可以停止、启动或重新启动应用程序池 - 更多详细信息请参见:http://technet.microsoft.com/en-us/library/ee522997%28v=ws.10%29.aspx

虽然Armaan的解决方案帮助我解决了问题,但并没有永久解决问题。


0
如果是IIS 8,打开控制面板,打开/关闭Windows功能,启用"命名管道激活",然后重新启动IIS。希望对IIS 7也适用。

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