在WebService的情况下,Application_End究竟何时触发?
我读取(Application_End global.asax)每次卸载应用程序时都会调用Application_End。这是否意味着在每次调用Web服务中的方法之后?
我有一段代码,我需要在第一次调用IIS时再触发一次,并在最后一次调用IIS之后(以及在回收之间)再次触发,我不能在每次WebService上触发它请求和回复...
答案 0 :(得分:10)
Application_End
正是您所寻找的;根据您设置的配置卸载应用程序,但默认情况下,它会在任何请求进入后继续运行一段时间空闲,或者在请求不断进入时它将继续运行。
请注意,其他内容可能会导致应用池刷新,从而导致Application_End
被调用;一定数量的重新编译(由于更改的aspx文件等),一定的时间段运行,一定的内存压力等。同样,这些都是可配置的,但通常设置为合理的默认值。
要记住的关键是,您可以预期Application_Start
和Application_End
之间会有一段时间,但根据具体情况,您无法知道会有多少时间发生在服务器上。
另请注意,当应用程序池被回收时,已经运行的请求不会突然停止,并且它们实际上可能与新进程处理的新请求重叠。这意味着在新应用池的End
之后,旧的应用池Start
可能会被称为。但这并不重要,因为每个应用程序都有自己的AppDomain,并且不共享数据。 (但有时可以解释其他奇怪的行为。)哦,最后;即使这也是可配置的!
编辑:还有一件事要补充!请注意,如果服务器突然关闭,Application_End
将不被调用。