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


252

老实说,我尝试过对IIS进行欺骗,而当我以为自己想摆脱它时,我意识到我的解决方法不起作用。这是我尝试做的事情:

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

2)我需要在应用程序关闭时完成许多工作(取消订阅,断开连接,处分……),我想最好的选择是在Global.asax中的* Application_End *方法中。

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 *中进行必要的工作而在Application Pool关闭时正常关闭了应用程序。

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

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

我无法弄清楚。谁能告诉我为什么会这样以及如何解决呢?

如果我不知道这一点,我将返回第一个解决方案(从代码发送GET请求),但是由于我什至不知道出了什么问题,所以这个问题会困扰我。


您正在使用哪个版本的IIS?
chux x

IIS 7.5(7.5.7600.16385)
Ivan Peric

不是您问题的直接答案,而是对于其他有类似问题并假设您拥有面向Internet的应用程序的用户:您只需每隔X时间使用uptimerobot.com之类的外部服务即可触摸您的应用程序。您可以使应用保持运行状态,并且可以享受该服务的额外好处(正常运行时间,警报等)。
qbantek 2014年

@qbantek即使我正在处理的应用程序不面向互联网,您还是给了我一个好主意。通过将运行状况检查类型设置为“简单HTTP GET”,我可以使用负载平衡器进行定期触摸。谢谢
伊万·佩里克

Answers:


24

问题

您正在特定情况下使用SimpleWorkerRequest。您正在IIS中使用它。如果您查看以前的MSDN链接(重点是我的链接):

提供HttpWorkerRequest抽象类的简单实现,该类可用于在Internet Information Services(IIS)应用程序之外承载ASP.NET应用程序。您可以直接使用SimpleWorkerRequest或对其进行扩展。

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

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

解决方案

我建议删除对的呼叫SimpleWorkerRequest。相反,您可以使用Microsoft解决方案来确保您的网站在回收后自动启动。您需要的是用于IIS 7.5的Microsoft 应用程序初始化模块。配置并不复杂,但是您需要了解确切的选项。这就是为什么我也建议IIS 7.5应用程序初始化UI的原因。UI是由MSDN博客编写的。

那么Microsoft解决方案到底能做什么?它可以完成您想做的事情-启动应用程序池后,IIS向您的网站发送“获取”请求。


2
我希望找到一个可以用代码实现的解决方案,但这已经足够接近“足够好”了,因此我将悬赏金授予了它。但是我猜想@danijelk提供的解决方案对于大多数出于非我指定原因遇到此问题的人最有用。因此,这是供他们阅读的说明。
伊万·佩里克

650

尝试使用重新注册ASP.NET aspnet_regiis -i。它为我工作。

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

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

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


谢谢您的回答。我已经尝试过了,但是没有用。:( –
Osama khodrog 2013年

8
在Windows Server 2012上不起作用。请阅读本页上Zach的文章。
伊万·阿克切罗夫

谢谢。为我在Azure的虚拟机上执行此操作。我想知道的是为什么我必须在新安装上执行此操作。当然,ASPNET在安装时会自行注册吗?我的猜测是它与安装顺序有关。
大卫·布里奇

4
如果您使用的是.NET 4.5.x或4.6.x,请不要被提到4.0的答案所迷惑,并认为它不适用于您。就像我这样,此问题可能与IIS之前.NET的安装顺序有关。即使我的应用程序正在使用.NET 4.5.2,运行该命令(在我的情况下为64位版本)也可以修复该问题。
Coxy

Windows 2008,全新安装AWS微服务器要求我运行此命令。
terary

170

如果您在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平台安装程序安装所有内容(包括所有依赖项)之后需要这样做,这完全超出了我的范围...


3
配置Windows Server是PITA。为什么没有中央的包裹管理系统?
Kugel 2014年

如果您在Web平台上安装iis,请查看Virgo139的评论,它可以轻松解决我的问题
castors33,2014年

这是Windows 10 Pro 1607版对我的修复方法,加油!
Apogee

这也将它固定在Windows 10上。值得注意的是,常用的命令行修复(ASPNET_REGIIS.EXE -i)是不允许在Windows 10
纳特韦伯

Windows 10 Pro的确认解决方案。
Zoomzoom

59

尽管遵循了本页上的大多数建议,但我在Windows Server 2012上仍然遇到问题。安装.NET Extensibility 4.5可以为我解决此问题:

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


2
感谢您的解释,我一直在盯着Web服务器-> Web服务器-> Web服务器管道太长时间... :)
Gleno 2014年

2
不要忘记检查“角色和功能”>“服务器角色”>“ Web服务器(IIS)”>“ Web服务器”>“应用程序开发”>“ ASP.NET 4.6(或4.5,取决于您的设置)”
Lionet Chen

1
是的,然后重新启动IIS服务。为我工作!谢谢。+1
生锈的钉子'18

47

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

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

建议的答案aspnet_regiis不适用于Windows 10(创建者更新和更高版本)或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。 有关更多详细信息,请访问http://go.microsoft.com/fwlink/?LinkID=216771
完成安装ASP.NET(4.0.30319.0)。

有趣的是,“打开/关闭Windows功能”对话框不允许我取消选中.NET或ASP.NET 4.6,并且只能使用上面的DISM命令。不确定功能名称是否正确,但是对我有用


这已为我修复,因为我正在运行Windows 10专业版并附带创建者更新。谢谢!
塞缪尔·普里耶

传奇的答案!我不得不重建我的Web服务器,并且几年没有更新脚本,我已经将此DISM命令添加到我的VM配置脚本中,就像一个魅力一样。
克里斯·

dism / online /启用功能/ featurename:IIS-ASPNET45 / all在Windows Server 2016上为我工作
Syed Nasir Abbas

多亏你,我还有工作!:)工作。
斯科特,

42

运行以下命令之一:

对于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

我注意到这样做时,文件夹“ aspnet_client”被添加到了IIS Connections的Sites目录下的网站
eaglei22 '17

26

这个https://stackoverflow.com/a/13266763/1277458可以正常使用。但是,如果您使用的是64位操作系统,请在路径中使用Framework64而不是Framework:

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

FWIW,Server 2012 R2表示不支持此选项,建议使用“功能”对话框启用ASP.NET 4.5
bvj 2015年

是的,Zach的答案涵盖了这一点。
Neshta 2015年

13

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


1
我的操作系统是Windows 2012 R2上的IIS。在服务器管理器>管理>添加角色和功能>基于角色或基于功能的安装>(选择服务器)> Web服务器(IIS)> Web服务器>应用程序开发> ASP.NET 4.5中添加了兼容的ASP.NET。正如@ArsmanAhmad所说,一个很好的健全性检查是验证您的App Pool .NET CLR版本是否设置为v4.0。
GBU

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(空格减去眼睛)。输入。

如果正确执行此操作,您将看到它开始安装asp.net,然后告诉您成功。


为我完美地工作。谢谢。
麦克

5

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

应用程序池>您的应用程序>高级设置> .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

重新启动您application-site的IIS管理器并享受。


是的,我尽力使答案最简单。;-) @yuyangJian
Arsman Ahmad

4

我知道这是个老歌,但我想我可能会增加一些价值。对于我们这些在域外运行Server Core的用户(域成员可以仅远程运行Server Manager来添加/删除功能/角色),您必须诉诸命令行。

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

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


4

安装了.net 4.7的同一错误消息也给我带来了挑战。

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

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

启用此功能后,将启用其他功能的分配...我只按了“确定”按钮,问题就解决了。 Windows功能对话框的屏幕转储


我应该补充一点,这是Windows 10专业
theodor.johannesen

2

我正在使用Windows Server2012。.NET可扩展性4.5功能已启用。WebDAVModule已删除。我仍然在ASP.NET路由'/ docs'上收到500.21错误。

将'skipManagedModules'更改为false可解决此问题。

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

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



1

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

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


1

上周,这个错误开始在我的所有地方发生,影响了我机器上的现有网站。我在这里尝试任何建议都没有运气。最终,我从IIS中完全删除了WebDAV(Windows功能-> Internet信息服务->万维网服务->通用HTTP功能-> WebDAV发布)。在此之后,我做了一个很好的IIS重置,我的错误终于得到解决。

我只能猜测是Windows更新引发了问题,但我不确定。


只是有同样的问题。安装了一些Windows更新程序,这些更新程序可以切换我的IIS设置。关闭WebDAV发布会再次对其进行修复。
ElliotSchmelliot 2015年

0

您可以通过将iis中的“ ExtensionlessUrlHandler-Integrated-4.0”类型更改为System.Web.DefaultHttpHandler来解决此问题。


0

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

我可以通过为单个应用程序池禁用WebDAV来解决此问题,这可以在使用PUT或时停止“错误模块”错误DELETE

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

  1. 单击受影响的应用程序池
  2. WebDAV Authoring Tools在清单中寻找
  3. 点击打开
  4. 点击Disable WebDAV右上角。

da!

我仍然在web.config文件中保留了删除项。

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

该链接是我在其中找到说明的地方,但不清楚。


0

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

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

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

一段时间后,我们开始随机出现此错误。

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

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

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


0

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

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

在此处输入图片说明


0

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

在托管服务提供商的控制面板上,我为IIS和ASP.Net启用了错误日志记录。然后知道该错误实际上是由于缺少cshtml造成的。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.