2013-04-10 148 views
0

我想弄清楚我的应用程序是否在Web服务器中运行。现在我们从Visual Studio知道您可以在本地主机上运行应用程序,并且可以停止它。上传到Web服务器时,asp.net web应用程序是否仍然运行?

的情况是,在我的应用程序,我已经在那里上Application Start定义一个Timer 2分钟,然后执行Sub其发送电子邮件Global.asax

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

有什么想法?

回答

0

据我了解,默认情况下IIS会关闭(回收)该站点所连接的工作池,如果该访问池未被访问超过20分钟。这个设置可以改变,并有一些工具可以帮助保持网站“活着”。

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

我不确定的是如果您设置的计时器将保持应用程序活着。我的猜测是不会的。

编辑:

定时器不会保持网站的活着,这可能是帮助(从http://www.west-wind.com/weblog/posts/2007/May/10/Forcing-an-ASPNET-Application-to-stay-alive

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(); 
} 

这种方法的问题是计时器不准确,因为当池试图回收再开始时它将被丢弃获得。

0

一般来说,在Web应用程序中使用定时器是一个坏主意。原因是你永远不知道IIS何时决定回收应用程序池工作线程。另外,定时器很可能是全局性的,而不是用户特定的,所以你不能使用Session或其他用户特定数据。

如果你需要运行一个任务,那么你应该创建一个windows服务来完成这个任务。

1

除了@ GJKH的回答是:

如果您正在运行IIS 7.5或8,那么你就可以打开在配置applicationhost.config始终开启选项。

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

enter image description here

相关问题