老实说,我试图对IIS耍个卑鄙的把戏,就在我以为我会逃脱它的时候,我才意识到我的解决办法行不通。以下是我想做的事:
1)我有一个ASP.NET应用程序,它具有继承ASP.NET的预加载器类,并在预加载方法实现中执行所有繁重的初始化(应用程序很复杂,它是一个庞大系统的一部分,因此需要大约2分钟来建立到所有必要服务的连接,并预先实例化一些统一注册)。
2)在应用程序关闭(取消订阅、断开连接、处理、.)方面,我有很多工作要做,我想最好的地方是在位于*Application_End* Global.asax的方法中。
3)当我有用户活动时,一切都正常工作(启动包含上述web应用程序的Application后的第一个请求将导致调用*Application_Start*,然后在application停止或循环上调用*Application_End* ),但当没有用户活动时出现问题,应用程序在激活48小时后试图重新启动自身(配置要求)。由于没有任何请求,所以应用程序没有正式启动。因此,它不能优雅地停止,因为*Application_End*不会被调用。
4)现在是混乱的部分..。在预加载方法的末尾,我尝试从代码中发出一个GET请求,它起了作用。但这个解决方案对我来说似乎很糟糕,尽管它奏效了。所以,我尝试了很多事情,最后一次尝试的是:
SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);..。这已经达到了它的目的。*Application_Start*被调用了,(我检查了响应,它包含了应该在初始请求中显示的登录页面),在Application关机应用程序上,通过在*Application_End*中完成必要的工作而优雅地结束了。
但
在以这种方式启动应用程序(预加载和启动)之后,当我希望通过Web浏览器访问应用程序时,会发生这样的情况:
HTTP Error 500.21 -内部服务器错误处理程序“ExtensionlessUrlHandler-Integrated4.0”模块列表中有一个错误的模块"ManagedPipelineHandler“
我想不出这点。有人能告诉我为什么会发生这种事,以及如何解决吗?
如果我不知道这一点,我会回到第一个解决方案(从代码发送GET请求),但是这个问题会困扰我,因为我甚至不知道出了什么问题。
发布于 2013-11-26 21:35:59
问题
您正在使用SimpleWorkerRequest的场景,而该场景不是为其设计的。您正在IIS中使用它。如果您查看前面的MSDN链接(重点是我的):
提供HttpWorkerRequest抽象类的简单实现,该抽象类可用于在Internet信息服务(IIS)应用程序之外承载ASP.NET应用程序。您可以直接使用SimpleWorkerRequest,也可以扩展它。
此外,如果您查看System.Web.Hosting命名空间的MSDN文档(SimpleWorkerRequest位于此命名空间中),您还会看到类似于上面的内容(同样,重点是我的):
System.Web.Hosting命名空间提供了托管来自(IIS)之外的托管应用程序的ASP.NET应用程序的功能。
解决方案
我建议删除对SimpleWorkerRequest的调用。相反,您可以使用Microsoft解决方案来确保您的网站在回收后自动启动。您需要的是微软的IIS 7.5的应用程序初始化模块。配置并不复杂,但您需要了解确切的选项。这就是我也推荐IIS 7.5的应用程序初始化UI的原因。UI是由MSDN博主编写的。
那么,微软的解决方案到底是做什么的呢?它完成了您想要做的事情--在应用程序池启动后,IIS会向您的网站发送一个"get“请求。
发布于 2012-11-07 09:29:46
尝试用ASP.NET重新注册aspnet_regiis -i.对我起作用了。
.NET 4的可能路径(来自提升的命令提示符):
c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -ihttp://forums.iis.net/p/1190643/2026401.aspx
发布于 2013-02-26 22:54:21
如果您在Windows8/ Windows 2012和.Net 4.5中遇到此错误,请遵循以下说明:http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html
转到“打开或关闭Windows功能”,然后是Internet信息服务,然后是万维网服务,然后是应用程序开发功能,然后启用ASP.NET 4.5
这对我有用(虽然在Windows 2012中向导和措辞有点不同,但您会弄清楚的)。尽管如此,在通过Web平台安装程序安装所有东西(包括所有依赖项)之后,为什么这是必要的呢?
https://stackoverflow.com/questions/13162545
复制相似问题