我刚注意到IIS在闲置20分钟后自动关闭了我的ASP.NET Web应用程序。该网站托管在Godaddy.com上。
下面是记录Application_Start和Application_End方法的Global类。我上传的图片是我看到的结果。
我在06:22:01的最后一次电话会议后于2013-05-24 06:42:40关闭了。 (20分钟,华...)
一天后,我在2013-05-25 03:05:27再次打电话,网站被唤醒了。
奇怪? 我不希望我的网站睡觉。有没有办法让它始终保持理智?
public class Global : HttpApplication
{
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
log.Debug("Application_AuthenticateRequest -> " + base.Context.Request.Url);
}
protected void Application_End(object sender, EventArgs e)
{
log.Info("Application_End");
}
protected void Application_Start(object sender, EventArgs e)
{
log.Info("Application_Start");
}
}
答案 0 :(得分:3)
如果您没有任何时间保存资源请求,IIS / asp.net会关闭应用程序。
现在这通常在服务器端处理,如果你想避免它,但在你的情况下你不能干扰IIS设置,所以一个技巧是创建一个读取每10分钟左右一页的计时器。 / p>
您在应用程序启动时启动它,并且在应用程序关闭时不要忘记停止它。
// use this timer (no other)
using System.Timers;
// declare it somewhere static
private static Timer oTimer = null;
protected void Application_Start(object sender, EventArgs e)
{
log.Info("Application_Start");
// start it when application start (only one time)
if (oTimer == null)
{
oTimer = new Timer();
oTimer.Interval = 14 * 60 * 1000; // 14 minutes
oTimer.Elapsed += new ElapsedEventHandler(MyThreadFun);
oTimer.Start();
}
}
protected void Application_End(object sender, EventArgs e)
{
log.Info("Application_End");
// stop it when application go off
if (oTimer != null)
{
oTimer.Stop();
oTimer.Dispose();
oTimer = null;
}
}
private static void MyThreadFun(object sender, ElapsedEventArgs e)
{
// just read one page
using (System.Net.WebClient client = new System.Net.WebClient())
{
client.DownloadData(new Uri("http://www.yoururl.com/default.aspx"));
}
}
一个注意事项,除非您需要,否则不要使用此技巧,因为您创建了一个永生的线程。通常谷歌会读取网页并保持“温暖”,如果你有一个非常新的网站谷歌和其他搜索引擎没有开始索引,或者如果你有一个只有两页永不改变。
因此我不建议这样做 - 并且关闭您的网站并节省资源并不坏,并且您的网站可以从任何被遗忘的开放内存中清除并重新开始......
Keep your ASP.Net websites warm and fast 24/7
Application Initialization Module for IIS 7.5
Auto-Start ASP.NET Applications (VS 2010 and .NET 4.0 Series)