C# 关于IHttpModule.Dispose和Application\u End的问题

C# 关于IHttpModule.Dispose和Application\u End的问题,c#,asp.net,iis,iis-7,C#,Asp.net,Iis,Iis 7,我刚读了这篇文章我发现了这个 “Dispose方法在删除之前执行任何最终清理工作 从执行管道中删除模块的。” 这意味着它的应用范围很广 没关系。不管怎样,我自己试着发现 的IHttpModule Dispose方法和事件处理程序 已处理的事件应该几乎相同。第一种情况发生 就在第二次之后 我不认为这是100%正确的,即IHttpModule.Dispose后面不总是跟应用程序_End。假设我有多个应用程序对象实例在为我的应用程序运行,这意味着每个应用程序对象实例中都有单独的模块实例。现在让我们假设

我刚读了这篇文章我发现了这个

“Dispose方法在删除之前执行任何最终清理工作 从执行管道中删除模块的。”

这意味着它的应用范围很广

没关系。不管怎样,我自己试着发现 的IHttpModule Dispose方法和事件处理程序 已处理的事件应该几乎相同。第一种情况发生 就在第二次之后

我不认为这是100%正确的,即IHttpModule.Dispose后面不总是跟应用程序_End。假设我有多个应用程序对象实例在为我的应用程序运行,这意味着每个应用程序对象实例中都有单独的模块实例。现在让我们假设当应用程序池充满应用程序实例时,会发生什么?难道不是开始一个接一个地处理应用程序实例,然后在链中处理应用程序实例中的模块吗。现在,这个模块的处理并不意味着应用程序_-End将在此之后启动。应用程序仍在运行。我说得对吗

是的


每个HttpApplication都有HttpModules。与其名称建议相反,global.asax中的Application_End方法不会在每个HttpApplicaton的生命周期结束时启动。它在当前AppDomain中所有HttpApplication的生命周期结束时(AppDomain被拆除时)触发。应用程序启动方法也是如此。

每个应用程序只有一个应用程序对象实例。有许多会话对象,每个对象处理请求,或等待回收

应用程序池不会充满应用程序对象,因为每个应用程序只有1个。当一个应用程序池承载多个应用程序时,就会有很多应用程序,回收应用程序池将杀死它们。应用程序池上还具有运行状况监视功能,在使用一定数量的请求/内存后,将重新启动进程。在这种情况下,在启动新应用程序处理新请求的同时,现有会话将停止。当旧应用程序中的所有会话都已停止时,该应用程序将被拆除


有关详细信息,请参阅。

谢谢您的回复!还有一件事。。当应用程序池充满应用程序对象实例时,它将开始清理它们,这是否正确?或者应用程序池将重新启动?取决于IIS在提出问题当天的感受。。。。如果工作进程达到回收条件(由IIS配置中应用程序池上的属性确定),则整个进程将重新启动,并生成新的w3wp。但是,在正常使用期间(因为重新启动整个应用程序池的成本很高),应用程序池很可能会创建和处理HttpApplication实例。按照配置,IIS还可以在单个应用程序池工作进程中托管多个AppDomain,还可以为一个应用程序池创建一个由多个worder进程同时运行组成的web花园。