处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误的模块“ManagedPipelineHandler”

时间:2012-10-31 16:29:20

标签: c# asp.net iis web-applications

说实话,我试图在IIS上变成一个肮脏的把戏,当我认为我要逃避它时,我意识到我的解决方法不起作用。这是我试图做的事情:

1)我有ASP.NET应用程序,它具有继承 IProcessHostPreloadClient Preloader 类,并在 Preload 方法实现中执行所有繁重的初始化(应用程序很复杂,它是庞大系统的一部分,因此建立与所有必要服务的连接大约需要2分钟,并预先实例化一些Unity注册。)

2)我有很多工作需要在应用程序关闭(取消订阅,断开连接,处理......)上完成,我想最好的地方就是位于 Global.asax中

3)当我有用户活动时,一切正常工作(包含上述Web应用程序的应用程序池启动后的第一个请求将导致* Application_Start *被调用,之后*应用程序池停止或回收时调用Application_End *) ,但是当没有用户活动且应用程序在激活48小时后尝试重新启动时会出现问题(已配置的要求)。由于没有请求,申请正式没有开始。因此,它不能被优雅地停止,因为* Application_End *将不会被调用。

4)现在出现了凌乱的部分......我试图在 Preload 方法的末尾从代码发出GET请求,并且它有效。但这个解决方案对我来说似乎很糟糕,尽管它有效。所以,我尝试了很多东西,我尝试的最后一件事是:

SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);

......这就是它的目的。 *调用Application_Start *,(我已经检查了响应,它包含了应该在初始请求中显示的登录页面),并且应用程序池关闭应用程序通过在* Application_End *中执行必要的工作而正常结束。

BUT

以这种方式启动(预加载和启动)应用程序后,当我想通过Web浏览器访问应用程序时会发生这种情况:

  

HTTP错误500.21 - 内部服务器错误   处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误的模块“ManagedPipelineHandler”

我无法弄清楚这一点。任何人都可以告诉我为什么会发生这种情况以及如何解决这个问题?

如果我没有想到这一点,我将回到第一个解决方案(从代码发送GET请求),但这个问题会让我感到烦恼,因为我甚至不知道什么是错的。

22 个答案:

答案 0 :(得分:641)

尝试使用aspnet_regiis -i重新注册ASP.NET。它对我有用。

.NET 4的可能路径(来自提升的命令提示符):

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

http://forums.iis.net/p/1190643/2026401.aspx

答案 1 :(得分:158)

如果您在Windows 8 / Windows Server 2012和.Net 4.5中遇到此错误,请按照以下说明操作: http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html

转到“打开或关闭Windows功能” 然后是Internet信息服务 然后是万维网服务 然后是应用开发功能 然后启用ASP.NET 4.5

这对我有用(虽然Windows Server 2012中的向导和措辞略有不同,但你会弄清楚)。有了这个说法,为什么在通过Web平台安装程序安装包括所有依赖项在内的所有内容之后,这是必要的...

答案 2 :(得分:51)

尽管在此页面上提供了大量建议,但我仍然在Windows Server 2012上遇到问题。安装.NET Extensibility 4.5为我解决了这个问题:

Add Roles and Features > Server Roles > Web Server (IIS) > Web Server > Application Development > .NET Extensibility 4.5

答案 3 :(得分:39)

运行以下命令之一:

对于32位Windows操作系统:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

对于64位Windows操作系统:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -I

答案 4 :(得分:36)

对于 Windows 10 / Windows Server 2016 ,请使用以下命令:

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

aspnet_regiis的建议答案在Windows 10(Creators Update及更高版本)或Windows Server 2016上不起作用:

  

C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -i
  Microsoft(R)ASP.NET RegIIS版本4.0.30319.0
  管理实用程序,用于在本地计算机上安装和卸载ASP.NET   版权所有(C)Microsoft Corporation。保留所有权利。
  开始安装ASP.NET(4.0.30319.0)   此版本的操作系统不支持此选项。管理员应使用“打开/关闭Windows功能”对话框,服务器管理器管理工具或dism.exe命令行工具,使用IIS8安装/卸载ASP.NET 4.5。有关详细信息,请参阅{{ 3}}。
  完成安装ASP.NET(4.0.30319.0)。

有趣的是,“打开/关闭Windows功能”对话框不允许我取消.NET和ASP.NET 4.6,只有上面的DISM命令有效。不确定 featurename 是否正确,但它对我有用。

答案 5 :(得分:24)

https://stackoverflow.com/a/13266763/1277458完美无缺。但是如果你有64位操作系统,则在路径中使用Framework64而不是Framework:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i

答案 6 :(得分:23)

问题

您在不是专为其设计的方案中使用SimpleWorkerRequest。您正在IIS 中使用。如果您查看以前的MSDN链接(重点是我的):

  

提供HttpWorkerRequest抽象类的简单实现,该抽象类可以用于托管Internet信息服务(IIS)应用程序之外的ASP.NET应用程序。您可以直接使用SimpleWorkerRequest或扩展它。

另外,如果您查看System.Web.Hosting namespace的MSDN文档(SimpleWorkerRequest在此命名空间中),您还会看到类似于上面的内容(同样重点是我的):

  

System.Web.Hosting命名空间提供从托管应用程序托管ASP.NET应用程序的功能 Microsoft Internet信息服务(IIS)之外。

解决方案

我建议删除对SimpleWorkerRequest的通话。相反,您可以使用Microsoft解决方案确保您的网站在回收后自动启动。您需要的是Microsoft Application Initialization Module for IIS 7.5。配置并不复杂,但您需要了解确切的选项。这就是为什么我也会推荐Application Initialization UI for IIS 7.5。用户界面由MSDN博主撰写。

那么Microsoft解决方案究竟做了什么?它会执行您要执行的操作 - IIS在应用程序池启动后向您的网站发送“获取”请求。

答案 7 :(得分:13)

在我的情况下(Windows 10 + IIS 10)我必须打开“打开或关闭Windows功能”,然后转到Internet信息服务&gt;万维网服务&gt; <应用程序开发特征>并检查 ASP.NET 4.6

答案 8 :(得分:6)

将此作为自己的帖子,因为这让我花了好几个小时。

我在这里和其他地方看到了关于这个问题和aspnet_regiis修复的类似帖子。他们没有为我工作,aspnet_regiis表现得很奇怪,只是列出选项等等。

如上述用户ryan-anderson所示,您无法输入.exe

对于那些对服务器上的IIS以外的东西不那么舒服的人来说,这就是你用简单的步骤做的事情。

  1. 在类似于此路径的文件夹中查找aspnet_regiis。 c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \

  2. 在开始菜单或任何位置右键单击命令提示符,并告诉它以管理员身份运行。使用Windows“运行”功能不起作用,或者不适用于我。

  3. 返回aspnet_regiis可执行文件。单击并将其右键拖动到命令提示符中,或将地址复制粘贴到命令提示符中。

  4. 删除,如果它在那里,最后是.exe。这是关键。最后添加-i(空格减去眼睛)。输入

  5. 如果你这样做了,你会看到它开始安装asp.net,然后告诉你它成功了。

答案 9 :(得分:4)

我知道这是一个老人,但我想我可能会增加一些价值。对于我们这些在域外运行Server Core的人(域成员可以只是远程运行服务器管理器来添加/删除功能/角色),您必须使用命令行。

Powershell用户可以输入“Install-WindowsFeature Web-Asp-Net45”

这应该等同于使用服务器管理器。

答案 10 :(得分:4)

我遇到了同样的错误消息,安装了.net 4.7。

解决方案是按照前面提到的一篇文章进行“打开或关闭Windows功能”,其中“.NET Framework 4.7高级服务” - &gt; “ASP.NET 4.7”已经被检查过了。

在列表的下方,有“Internet信息服务”和子应用程序“应用程序开发功能” - &gt; “ASP.NET 4.7”,还需要进行检查。

启用此功能后,其他功能将启用...我只需按下“确定”按钮,问题就解决了。 Screendump of the windows features dialog

答案 11 :(得分:3)

确保您已在 IIS管理器中将application-site版本从v2.0设置为v4.0

  

应用程序池&gt;您的申请&gt;高级设置&gt; .NET Framework版本

之后,安装ASP.NET

对于32位操作系统(Windows):

  

C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -i

对于64位操作系统(Windows):

  

C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -i

在IIS管理器中重新启动application-site并享受

答案 12 :(得分:1)

我遇到了这个问题,发现即使使用非Express版本,删除以下文件夹也有帮助。快递:

C:\Users\<user>\Documents\IISExpress

答案 13 :(得分:1)

安装.NET 4.7对我有用。我之前只安装了3.5。 enter image description here

答案 14 :(得分:1)

我正在使用Windows Server 2012. .NET Extensibility 4.5功能已启用。 WebDAVModule已删除。 我在ASP.NET路由&#39; / docs&#39;。

上仍然出现500.21错误

更改&#39; skipManagedModules&#39;错误修复了问题。

<applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
        <add initializationPage="/docs" />    
</applicationInitialization>

感谢https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI

答案 15 :(得分:1)

这个错误上周突然发生在我面前,影响了我机器上的现有网站。我试试这里的任何建议都没有运气。最终我完全从IIS中删除了WebDAV(Windows功能 - &gt; Internet信息服务 - &gt;万维网服务 - &gt;常见HTTP功能 - &gt; WebDAV发布)。在此之后我进行了IIS重置以获得良好的衡量标准,我的错误终于得到了解决。

我只能猜测Windows更新启动了这个问题,但我无法确定。

答案 16 :(得分:0)

我也遇到了这个问题。我的MVC4应用程序在带有IIS 8.5的Windows Server 2012 R2上运行。这些发布的解决方案都不适合我...通过IIS安装缺少的框架功能可以解决它但安装总是失败。

我必须使用Web Platform Installer并安装以下软件包:

enter image description here

答案 17 :(得分:0)

这可能不是OP的有用解决方案,但它涉及相同的“错误”消息。

我们正在IIS8.5上托管PHP页面,并正确安装了.NET 4.5。

我们利用预加载功能确保我们的应用程序始终全面响应。

过了一会儿,我们开始随机收到这个错误。

在web.config中:我将skipManagedModules设为true, - &gt;不要这样做!

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
<applicationInitialization skipManagedModules="false" doAppInitAfterRestart="true">
  <add initializationPage="/" />
</applicationInitialization>
...

虽然网站是php,但是分页的路由由模块管理!!!

答案 18 :(得分:0)

我在托管在共享托管服务器上的Web应用程序中遇到此问题。所以显然没有直接访问IIS,因此无法应用此处提出的许多解决方案。

在托管服务提供商的控制面板上,我启用了IIS和ASP.Net的错误日志记录。然后才知道这个错误实际上是在一个丢失的cshtml中撒谎。

答案 19 :(得分:0)

对我来说,从我的服务器中删除WebDAV会导致应用程序在使用503 Service UnavailablePUT时返回DELETE错误消息,因此我重新将其重新安装回来。我还尝试完全删除.NET Framework 4.5并重新安装它,并尝试按照建议重新注册,但无济于事。

我能够通过为个人应用程序池禁用WebDAV来解决此问题,这在使用PUTDELETE时停止了“错误模块”错误。

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

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

    我仍然将移除项目留在我的web.config文件中。

     <system.webServer>
        <modules>
          <remove name="WebDAVModule"/>
        </modules>
        <handlers>
          <remove name="WebDAV" />
        </handlers>
     <system.webServer>
    

    This link是我发现指示的地方,但不是很清楚。

答案 20 :(得分:0)

我解决了这个问题,添加了“打开或关闭Windows功能” The option ASP.NET 4.7

答案 21 :(得分:0)

您可以通过将iis中的“ExtensionlessUrlHandler-Integrated-4.0”类型更改为System.Web.DefaultHttpHandler来修复它