什么时候在 asp.net WebService 中调用 Application_End
Posted
技术标签:
【中文标题】什么时候在 asp.net WebService 中调用 Application_End【英文标题】:When is Application_End called in asp.net WebService 【发布时间】:2010-12-28 07:59:13 【问题描述】:在 WebService 的情况下 Application_End 究竟什么时候触发??
我读到 (Application_End global.asax) 每次卸载应用程序时都会调用 Application_End。这是否意味着在每次调用 Web 服务中的方法之后?
我有一段代码,我只需要在第一次调用 IIS 时触发一次,在最后一次调用 IIS 之后(以及在回收之间)再次触发,我不能让它在每个 WebService 上触发请求和响应...
【问题讨论】:
为什么不在这个函数上放置一个 Debug.Write("end called"), 找出你自己呢? 【参考方案1】:Application_End
正是您要找的;应用会根据你设置的配置卸载,但默认情况下,它会在任何请求进来后继续运行一定的空闲时间,或者在请求不断进来时保持运行。
请注意,其他事情可能会导致 App Pool 刷新,因此会导致 Application_End
被调用;一定数量的重新编译(由于更改的 aspx 文件等)、运行一定的时间段、一定量的内存压力等。同样,这些都是可配置的,但通常设置为合理的默认值。
要记住的关键是,您可以预计在 Application_Start
和 Application_End
之间会有一段时间,但根据服务器上发生的情况,您无法知道会有多少时间.
还要注意,当应用池被回收时,已经运行的请求不会突然停止,它们实际上可能与新进程正在处理的新请求重叠。这意味着旧应用程序池的End
可能会在新应用程序池的Start
之后被调用。但这无关紧要,因为每个应用程序都有自己的 AppDomain,并且不共享数据。 (但有时这可以解释其他奇怪的行为。)哦,最后;即使那也是可配置的!
编辑:还要添加一件事!请注意,如果服务器突然关闭,Application_End
将不会被调用。
【讨论】:
以上是关于什么时候在 asp.net WebService 中调用 Application_End的主要内容,如果未能解决你的问题,请参考以下文章
使用 jquery 从 asp.net webservice 解析简单的 xml
ASP.NET WebService 正在用 XML 标记包装我的 JSON 响应