说实话,我试图在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请求),但这个问题会让我感到烦恼,因为我甚至不知道什么是错的。
答案 0 :(得分:641)
尝试使用aspnet_regiis -i
重新注册ASP.NET。它对我有用。
.NET 4的可能路径(来自提升的命令提示符):
c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
答案 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以外的东西不那么舒服的人来说,这就是你用简单的步骤做的事情。
在类似于此路径的文件夹中查找aspnet_regiis。 c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \
在开始菜单或任何位置右键单击命令提示符,并告诉它以管理员身份运行。使用Windows“运行”功能不起作用,或者不适用于我。
返回aspnet_regiis可执行文件。单击并将其右键拖动到命令提示符中,或将地址复制粘贴到命令提示符中。
删除,如果它在那里,最后是.exe。这是关键。最后添加-i(空格减去眼睛)。输入
如果你这样做了,你会看到它开始安装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)
答案 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
并安装以下软件包:
答案 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 Unavailable
或PUT
时返回DELETE
错误消息,因此我重新将其重新安装回来。我还尝试完全删除.NET Framework 4.5并重新安装它,并尝试按照建议重新注册,但无济于事。
我能够通过为个人应用程序池禁用WebDAV来解决此问题,这在使用PUT
或DELETE
时停止了“错误模块”错误。
WebDAV Authoring Tools
Disable WebDAV
。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来修复它