0

我试图弄清楚我的应用程序在 Web 服务器中时是否仍在运行。现在我们从 Visual Studio 了解到,您可以在 localhost 上运行该应用程序并且可以停止它。

Global.asax情况是,在我的应用程序中,我Application Start定义了一个Timer2 分钟的位置,然后执行一个Sub发送电子邮件的位置。

我的问题是,如果用户请求Main.aspx然后Global.asax被启动,Global.asax每次用户请求时都会重新启动Main.aspx吗?或者它是否保持2分钟的间隔,无论Main.aspx是被调用还是空闲?以其他方式,根据这篇文章的标题,当用户离开 Web 应用程序时,是否Main.aspx按照 Visual Studio 按钮停止?stop如果是这样,是否Global.asax会受到影响或停止?

有什么想法吗 ?

4

3 回答 3

1

除了@GJKH 的回答:

如果您运行的是 IIS 7.5 或 8,则可以在 config 中打开 Always On 选项applicationhost.config

在启动模式的应用程序池设置中的 IIS 中,将其设置为始终运行。

在此处输入图像描述

于 2013-04-11T04:45:03.103 回答
0

据我所知,默认情况下,如果超过 20 分钟未访问该站点,IIS 将关闭(回收)该站点所连接的工作池。此设置可以更改,并且有一些工具可以帮助保持网站“活跃”。

global.asax 文件中 Application_Start 中的代码只会在应用程序启动并加载到池中时触发一次。访问网站上的任何页面都不会再次触发它。当池被回收并请求一个页面时,应用程序将再次启动并且 Application_start 将被触发。

我不确定您设置的计时器是否会使应用程序保持活动状态。我的猜测是不会。

编辑:

计时器不会让网站保持活力,这可能会有所帮助(来自http://www.west-wind.com/weblog/posts/2007/May/10/Forcing-an-ASPNET-Application-to-stay -活着

 public void PingServer()
    {
        try
        {
            WebClient http = new WebClient();
            string Result = http.DownloadString(App.Configuration.PingUrl);
        }
        catch (Exception ex)
        {
            string Message = ex.Message;
        }
    }

并在应用程序退出调用

void Application_End(object sender, EventArgs e)
{


    // Force the App to be restarted immediately
    new YourClassName().PingServer();
}

这种方法的问题是计时器不会准确,因为它会在池尝试回收然后重新启动时被丢弃。

于 2013-04-11T01:46:57.790 回答
0

一般来说,在 Web 应用程序中使用计时器是个坏主意。原因是您永远不知道 IIS 何时决定回收应用程序池工作线程。此外,计时器可能是全局的,而不是特定于用户的,因此您不能使用诸如 Session 或其他用户特定数据之类的东西。

如果您需要运行一项任务,那么您应该创建一个执行该任务的 Windows 服务。

于 2013-04-11T01:51:40.883 回答