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

Iva*_*ric 243 c# asp.net iis web-applications

说实话,我试图在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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

dan*_*elk 645

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

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

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
Run Code Online (Sandbox Code Playgroud)

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

  • 不适用于Windows Server 2012.阅读Zach在此页面上的帖子. (8认同)
  • 如果您使用的是.NET 4.5.x或4.6.x,请不要被提及4.0并且认为它不适用于您的答案所迷惑.这个问题可能与IIS之前的.NET安装顺序有关,就像我一样.运行命令(在我的情况下是64位版本)修复它,即使我的应用程序使用的是.NET 4.5.2. (3认同)

小智 166

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

  • 配置Windows Server是PITA.为什么没有中央包管理系统? (3认同)

Jon*_*han 52

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

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

  • 谢谢拼写出来,我盯着Web服务器 - > Web服务器 - > Web服务器管道太久了...... :) (2认同)
  • 不要忘记检查角色和功能 > 服务器角色 > Web 服务器 (IIS) > Web 服务器 > 应用程序开发 > ASP.NET 4.6(或 4.5,具体取决于您的设置) (2认同)

小智 41

运行以下命令之一:

对于32位Windows操作系统:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
Run Code Online (Sandbox Code Playgroud)

对于64位Windows操作系统:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -I
Run Code Online (Sandbox Code Playgroud)


Bar*_*jen 41

对于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命令工作.不确定功能名称是否正确,但它对我有用.


Nes*_*hta 25

/sf/answers/928673441/完美无缺.但是如果你有64位操作系统,则在路径中使用Framework64而不是Framework:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
Run Code Online (Sandbox Code Playgroud)


chu*_*e x 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.用户界面由MSDN博主撰写.

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

  • 我一直在寻找一个可以在代码中实现的解决方案,但这已经接近“足够好”了,所以我要奖励它。但我想@danijelk 提供的解决方案对于大多数因我指定之外的原因遇到这个问题的人来说是最有用的。所以这是一个让他们看一看的笔记。 (2认同)

Xar*_*kis 13

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


小智 7

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

在此处输入图片说明


shu*_*ath 6

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

我在这里和其他地方看到了关于这个问题和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,然后告诉你它成功了.


Ars*_*mad 5

确保您已在IIS Manager中将您的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 管理器中重新启动并享受。