处理程序“extensionlessurlhandler -综合- 4.0 -“;有一个不好的模块"ManagedPipelineHandler"在其模块列表中

老实说,我试过对IIS耍卑鄙的花招,就在我以为我能逃脱的时候,我意识到我的解决办法不起作用。以下是我试图做的:

1)我有ASP。NET应用程序,它具有继承IProcessHostPreloadClient预紧器类,并在预加载方法实现中进行所有繁重的初始化(应用程序很复杂,它是一个庞大系统的一部分,所以它需要大约2分钟来建立到所有必要服务的连接并预实例化一些Unity注册)。

2)我有很多工作需要做的应用程序关闭(取消订阅,断开连接,处置,…),我猜最好的地方是在*Application_End*方法位于Global.asax

3)当我有用户活动时一切都很好(包含上述web应用程序的应用程序池启动后的第一个请求将导致*Application_Start*被调用,然后*Application_End*在应用程序池停止或回收时被调用),但当没有用户活动时,应用程序试图在活跃48小时后重新启动自己时会出现问题(配置要求)。因为没有请求,所以没有正式开始申请。因此,它不能优雅地停止,因为*Application_End*不会被调用。

4)现在轮到麻烦的部分了……我已经尝试在预加载方法的末尾从代码中发出GET请求,并且它工作了。但这个解决方案对我来说很糟糕,尽管它很有效。所以,我尝试了很多东西,我最后尝试的是:

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

... 这已经达到了它的目的。*Application_Start*被调用,(我检查了响应,它包含登录页面,应该在初始请求中显示)和应用程序池关闭应用程序通过在*Application_End*中做必要的工作优雅地结束。

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

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

我想不通。有人能告诉我为什么会发生这种情况以及如何解决吗?

如果我不明白这一点,我将回到第一个解决方案(从代码发送GET请求),但这个问题会困扰我,因为我甚至不知道哪里出了问题。

298712 次浏览

尝试重新注册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 < a href = " http://forums.iis.net/p/1190643/2026401.aspx " > < / >

我遇到了这个问题,发现删除以下文件夹有所帮助,即使是非express版本。表达:

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

如果你在Windows 8/Windows Server 2012和。net 4.5上遇到这个错误,请遵循以下说明: http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html < / p >

转到"打开或关闭Windows功能" 互联网信息服务 然后是万维网服务 然后是应用程序开发特性 然后启用ASP。NET 4.5 < / p >

这对我来说很管用(尽管Windows Server 2012中的向导和措辞略有不同,但你会发现的)。话虽如此,为什么在通过Web平台安装程序(包括所有依赖项)安装了所有东西之后,这是必要的,这完全超出了我的范围……

尽管遵循了本页上的大部分建议,我在Windows Server 2012上仍然遇到了问题。安装。net Extensibility 4.5为我解决了这个问题:

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

我知道这是老调了,但我觉得我可以增加点价值。对于我们这些在域外运行Server Core的人(域成员可以远程运行Server Manager来添加/删除功能/角色),您必须求助于命令行。

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

这应该相当于使用服务器管理器。

这个问题

你正在使用SimpleWorkerRequest时的场景不是为它设计的。你正在使用它IIS内部。如果你看看之前的MSDN链接(重点是我的):

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

此外,如果你查看System.Web.Hosting名称空间的MSDN文档(SimpleWorkerRequest在这个名称空间中),你还会看到类似于上面的东西(再次强调,是我的):

hosting命名空间提供了托管ASP的功能。. NET应用程序从托管应用程序在微软Internet信息服务(IIS)之外

解决方案

我建议删除对SimpleWorkerRequest的调用。相反,你可以使用微软的解决方案来确保你的网站在回收后自动启动。你需要的是Microsoft iis7.5的应用程序初始化模块。配置起来并不复杂,但是您需要了解具体的选项。这就是为什么我也会推荐iis7.5的应用程序初始化UI。用户界面是由MSDN博主编写的。

那么微软的解决方案到底能做什么呢?它做了你正在尝试做的事情——IIS在应用程序池启动后向你的网站发送一个“get”请求。

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

这个https://stackoverflow.com/a/13266763/1277458可以完美地工作。但是如果你是64位操作系统,在path中使用Framework64而不是Framework:

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

运行以下命令:

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

对我来说,从我的服务器上删除WebDAV导致应用程序在使用PUTDELETE时返回503 Service Unavailable错误消息,所以我重新安装了它。我还尝试完全删除。net Framework 4.5并重新安装它,并尝试按照建议重新注册,但没有效果。

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

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

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

助教daaaa !

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

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

这个链接是我找到指令的地方,但不是很清楚。

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

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

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

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

我们利用预加载功能,以确保我们的应用程序总是响应全面。

过了一段时间,我们开始随机地得到这个错误。

在网络上。配置:我把skipManagedModules为true, ->不要这样做!

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

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

我用的是Windows Server 2012. net Extensibility 4.5特性。WebDAVModule移除。 我在ASP上仍然得到500.21的错误。NET路由'/docs'.

. NET

将'skipManagedModules'更改为false修复了这个问题。

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

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

我也遇到了这个问题。我的MVC4应用程序运行在Windows Server 2012 R2和IIS 8.5上。这些贴出来的解决方案对我都没用……通过IIS特性安装缺少的框架可以解决这个问题,但安装总是失败。

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

enter image description here

在我的情况下(Windows 10 + IIS 10),我必须打开“打开或关闭Windows功能”,然后进入互联网信息服务>万维网服务>应用程序开发功能>,并检查ASP。NET 4.6

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

应用程序池>您的应用程序>高级设置>。net框架版本

之后,安装你的ASP.NET

32位操作系统(Windows):

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

64位操作系统(Windows):

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

在IIS管理器中重新启动你的application-site,享受吧。

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

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

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

< p > C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe我< br > 微软(R) ASP。NET RegIIS版本4.0.30319.0
管理实用程序安装和卸载ASP。
. NET 微软公司版权所有。
.
. 开始安装ASP。净(4.0.30319.0)。< br > 此版本的操作系统不支持此选项。管理员应该安装/卸载ASP。使用“打开/关闭Windows功能”对话框,服务器管理器管理工具或dism.exe命令行工具。更多详细信息请参见http://go.microsoft.com/fwlink/?LinkID=216771 完成ASP的安装。净(4.0.30319.0)。< / p >

有趣的是,“打开/关闭Windows功能”对话框不允许我取消。net或ASP。NET 4.6,并且只有上面的DISM命令可以工作。不确定featurename是否正确,但它为我工作。

我在一个托管在共享托管服务器上的web应用程序中遇到了这个问题。所以显然没有直接访问IIS,所以不能应用这里提出的许多解决方案。

在主机提供商的控制面板上,我启用了IIS和ASP.Net的错误日志记录功能。然后知道这个错误实际上是在一个缺失的cshtml中。

这是我自己的帖子,因为这让我花了几个小时。

我在这里和其他地方看到了十几篇类似的关于这个问题和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,然后告诉您安装成功。

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

解决方案是遵循前面提到的一篇文章,与“打开或关闭窗口功能”,其中“;NET Framework 4.7 Advanced services”;——比;“ASP。NET 4.7“已经检查过了。

再往下看,还有“互联网信息服务”。和副注“应用开发特性”;——比;“ASP。NET 4.7",这也需要检查。

当启用此功能时,将启用分配其他功能…我简单地按下Ok按钮,问题就解决了。 窗口功能对话框的屏幕截图 < / p >

我解决了这个问题,添加了“打开或关闭Windows功能” 选择ASP。NET 4.7 < / p >

enter image description here

安装。net 4.7对我来说很有效。我之前只安装了3.5个。enter image description here