老实说,我曾尝试在 IIS 上使用一些卑鄙的把戏,就在我以为我可以逃脱惩罚时,我意识到我的解决方法行不通。这是我尝试做的事情:
1) 我有一个 ASP.NET 应用程序,它有 Preloader 类继承 IProcessHostPreloadClient 并在 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* 中执行必要的工作正常结束。
但是
应用程序以这种方式启动(预加载和启动)后,当我想通过 Web 浏览器访问应用程序时会发生以下情况:
HTTP Error 500.21 - Internal Server Error Handler "ExtensionlessUrlHandler-Integrated-4.0" has a bad module "ManagedPipelineHandler" in its module list
我无法弄清楚这一点。谁能告诉我为什么会发生这种情况以及如何解决?
如果我不明白这一点,我会回到第一个解决方案(从代码发送 GET 请求),但这个问题会困扰我,因为我什至不知道哪里出了问题。
最佳答案
尝试使用 aspnet_regiis -i
重新注册 ASP.NET。它对我有用。
.NET 4 的可能路径(来自提升的命令提示符):
c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
关于c# - 处理程序 "ExtensionlessUrlHandler-Integrated-4.0"在其模块列表中有一个坏模块 "ManagedPipelineHandler",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13162545/