小编典典

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

all

老实说,我曾试图在 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);

......这已经达到了它的目的。Application_Start
被调用,(我检查了响应,它包含应该在初始请求中显示的登录页面)并且在应用程序池关闭时,应用程序通过在 Application_End
中完成必要的工作而优雅地结束。

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

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

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

如果我不明白这一点,我将回到第一个解决方案(从代码发送 GET 请求),但这个问题会让我感到困扰,因为我什至不知道出了什么问题。


阅读 106

收藏
2022-05-10

共1个答案

小编典典

问题

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

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

此外,如果您查看System.Web.Hosting 命名空间
SimpleWorkerRequest在此命名空间中)的 MSDN 文档,您还将看到与上述类似的内容(再次强调的是我的):

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

解决方案

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

那么微软解决方案究竟是做什么的呢?它会做你想做的事——在应用程序池启动后,IIS 会向你的网站发送一个“get”请求。

2022-05-10