wake-up-neo.com

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

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

1)我的ASP.NET应用程序有 Preloader 类继承 IProcessHostPreloadClient 并在 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 *中执行必要的工作而正常结束。

_但_

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

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

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

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

236
Ivan Peric

问题

您正在使用 SimpleWorkerRequest 在它不是为其设计的场景中。您正在使用它在IIS。内部。如果您查看以前的MSDN链接(重点是我的):

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

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

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

解决方案

我建议删除对SimpleWorkerRequestname__的调用。相反,您可以使用Microsoft解决方案确保您的网站在回收后自动启动。您需要的是Microsoft IIS 7.5的应用程序初始化模块 。配置并不复杂,但您需要了解确切的选项。这就是为什么我还建议 IIS 7.5的应用程序初始化UI 。用户界面由MSDN博主撰写。

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

23
chue x

尝试使用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

640
danijelk

如果您在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平台安装程序安装包括所有依赖项之后的所有内容都是必要的...

158
Zach

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

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

50
Jonathan

运行以下命令之一:

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

对于 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。 有关详细信息,请参阅 http://go.Microsoft.com/fwlink/?LinkID=216771
完成安装ASP.NET(4.0.30319.0)。

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

36
Bart Verkoeijen

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

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

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

13
Xaris Fytrakis

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

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

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

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

  1. 在类似于此路径的文件夹中查找aspnet_regiis。 C:\ WINDOWS\Microsoft.NET \框架\ v4.0.30319 \

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

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

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

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

6
shubniggurath

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

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

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

4
jwdaigle

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

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

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

启用此功能后,将启用其他功能...我只需按下Ok按钮,问题就解决了。 Windows的Screendump功能对话框

4
theodor.johannesen

确保在 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

在IIS Manager中重新启动application-site并享受。

3
Arsman Ahmad

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

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

1
Thomas Bratt

我正在使用Windows Server 2012..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
shemanov

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

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

1
pirsqua

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

0
Edgar Chivichon

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

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

0
Dipendu Paul

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

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

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

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

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

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

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

0
Schwarzie2478

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

我不得不使用Web Platform Installer并安装以下软件包:

enter image description here

0
Frank

对我来说,从我的服务器中删除WebDAV导致应用程序在使用PUTDELETE时返回503 Service Unavailable错误消息,所以我再次重新安装它。我还尝试完全删除.NET Framework 4.5并重新安装它,并尝试重新注册,但无济于事。

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

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

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

Ta daaaa!

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

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

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

0
Luke

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

0
user3661608