老实说,我尝试过对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 *中进行必要的工作而在Application Pool关闭时正常关闭了应用程序。
但
以这种方式启动(预加载和启动)应用程序之后,这就是我想通过Web浏览器访问应用程序时发生的事情:
HTTP错误500.21-内部服务器错误处理程序“ ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中包含错误的模块“ ManagedPipelineHandler”
我无法弄清楚。谁能告诉我为什么会这样以及如何解决呢?
如果我不知道这一点,我将返回第一个解决方案(从代码发送GET请求),但是由于我什至不知道出了什么问题,所以这个问题会困扰我。