什么时候在 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_StartApplication_End 之间会有一段时间,但根据服务器上发生的情况,您无法知道会有多少时间.

还要注意,当应用池被回收时,已经运行的请求不会突然停止,它们实际上可能与新进程正在处理的新请求重叠。这意味着旧应用程序池的End 可能会在新应用程序池的Start 之后被调用。但这无关紧要,因为每个应用程序都有自己的 AppDomain,并且不共享数据。 (但有时这可以解释其他奇怪的行为。)哦,最后;即使那也是可配置的!


编辑:还要添加一件事!请注意,如果服务器突然关闭,Application_End不会被调用。

【讨论】:

以上是关于什么时候在 asp.net WebService 中调用 Application_End的主要内容,如果未能解决你的问题,请参考以下文章

asp.net WebService的一个简单示例

使用 jquery 从 asp.net webservice 解析简单的 xml

ASP.NET WebService 正在用 XML 标记包装我的 JSON 响应

Asp.net Webservice - 使用 jquery AJAX 安全调用 Web 服务

如何在ASP.net中调用webservice里的一个方法

[WEB API ]ASP.NET CORE WEB API 调用WebService数据