我想我听说ASP.NET应用程序会在闲置一段时间后关闭(即没有访问者).
有没有办法防止这种行为发生?我有一个计时器,它运行来自global.asax.cs application_start事件的一些代码,并希望确保它继续运行,即使没有访问者访问该站点.
提前致谢!
Mit*_*ers 27
你可以通过几种方式做到这一点.
如果您在选项二下,我强烈建议使用外部源,因为它管理较少,如果您没有可配置的IIS,则很可能没有可用于添加ping应用程序的服务器.
另外,我不推荐与Web应用程序进行同步的东西,因为我发现当应用程序确实需要回收时会出现问题......
最后一个想法
如果您确实采用了修改IIS空闲超时的路线,我建议您设置应用程序池的常规回收.由于许多Web应用程序确实受益于定期循环,并且最常见的是空闲超时是最大的常规循环因子.
Edu*_*rdo 18
除了外部保持活力,你可以让内部保持活力global.asax:
static Thread keepAliveThread = new Thread(KeepAlive);
protected void Application_Start()
{
keepAliveThread.Start();
}
protected void Application_End()
{
keepAliveThread.Abort();
}
static void KeepAlive()
{
while (true)
{
WebRequest req = WebRequest.Create("http://www.mywebsite.com/DummyPage.aspx");
req.GetResponse();
try
{
Thread.Sleep(60000);
}
catch (ThreadAbortException)
{
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
在IIS 6中,转到"应用程序池"部分,然后右键单击托管相关ASP.NET应用程序的池上的"属性".转到"性能"选项卡,取消选中"空闲后关闭工作进程:"
在IIS 7中,转到"连接"窗格并找到"应用程序池",然后为承载应用程序的池选择"高级设置".找到"空闲超时"属性并将其设置为"0"(这将禁用它).
默认值为20分钟不活动.通过取消选中该框,一旦您的AppDomain被工作进程加载,它将永远不会死亡(除非您终止进程或其他事情).默认情况下,IIS将在达到某个限制(例如内存上限)时回收该进程,但它也将启动一个新进程并"逐步"调整所有传入请求,直到旧的请求未使用,以便最大限度地减少中断.
如果您无法直接控制IIS配置(例如,共享主机),最好的办法是在一个单独的系统上运行一个小应用程序 - 比如一个永远在线的工作站 - 每隔x分钟就可以访问您的站点超时的应用程序池.没什么好看的 - 控制台应用程序中的简单WebRequest和while()循环就可以了.
| 归档时间: |
|
| 查看次数: |
15203 次 |
| 最近记录: |