我有IIS7.5。我们目前对我们网站上的实体拥有加权评级。计算加权等级的速度非常慢,因此加载主页现在需要超过10秒才能加载。IIS7是否可以让它每5分钟运行一次网页?
为了解决这个问题,我想将权重存储在每个实体的数据库中,并让IIS每5-10分钟运行一次脚本以重新计算权重。
我该如何去做这件事?如果它运行网页网址,对我来说最简单。
我有IIS7.5。我们目前对我们网站上的实体拥有加权评级。计算加权等级的速度非常慢,因此加载主页现在需要超过10秒才能加载。IIS7是否可以让它每5分钟运行一次网页?
为了解决这个问题,我想将权重存储在每个实体的数据库中,并让IIS每5-10分钟运行一次脚本以重新计算权重。
我该如何去做这件事?如果它运行网页网址,对我来说最简单。
不想要使用的客户端,仅服务器不断调用此功能,您可以在服务器上创建一个线程调用的函数计算它。
启动线程或计时器的更好方法是在Global中。ASAX,像这样的例子:
public class Global : System.Web.HttpApplication
{
private Timer _timer;
void Application_Start(object sender, EventArgs e)
{
int period = 1000 * 60 * 10; // 10 minutes
_timer = new Timer(TimerCallback, null, 1000, period);
}
private void TimerCallback(object state)
{
// Do your stuff here
}
}
}
谢谢,这看起来最简单。我对Global.asax不太熟悉,我会假设这会使用客户端请求来处理,但是哪个会偶尔会导致一个客户端长时间加载页面? – 2011-12-29 18:36:17
我有这个问题,Timer()不允许带4个参数的构造函数。我在ASP.net 4.0上。然而,我发现这个(http://www.mikesdotnetting.com/Article/129/Simple-task-Scheduling-using-Global.asax),它可以使用非常类似的东西,我可以使用 – 2011-12-29 18:41:17
使用System.Threading.Timer 。有一个System.Timers.Timer,但有其他用法。 – LawfulHacker 2011-12-29 18:59:28
您可以使用Cache
条目进行此设置,将来设置为过期10分钟。
当您添加该项目时,请使用CacheItemRemovedCallback
参数的回调函数 - 在此回调函数中执行您的数据库并重新添加到期的缓存条目。
其他选项包括:
Windows服务和时间表任务仍然需要您有某种方法将结果传递给IIS。
谢谢,不要太热衷于缓存,尽管这个过程会变得越来越慢,我不想让访问者偶尔有长时间的页面加载。 – 2011-12-29 18:35:05
@TomGullen - 不知道为什么会有任何方位?缓存条目仅作为使用Web命名空间的“计时器” - 仅用于触发将计算内容的回调。它可以包含垃圾(比如'null'),不能在任何地方使用。由于它使用回调,因此它将使用单独的线程,并且不会对任何用户造成任何影响。 – Oded 2011-12-29 18:37:00
哦,好吧!谢谢你,还是新的缓存 – 2011-12-29 18:40:28
一种方法是使用Windows服务,而不是调用Web URL。
然后,它可以在背景中完全带外运行以执行计算。这个细节在这里:
http://msdn.microsoft.com/en-us/library/d56de412%28v=VS.100%29.aspx
一些优势包括:
但是,您需要有合理的完全访问权限才能安装并运行服务器e服务。
谢谢,现在就看看这个。 – 2011-12-29 18:31:35
当然,还有一些在IIS进程和Web服务之间进行通信的方式。 – Oded 2011-12-29 18:33:15
可能:它可能就像执行计算并将它们写入某个表格一样简单。 – 2011-12-29 18:47:11
一个简单的WGET或类似的批处理文件,以及来自计划任务的帮助将做到这一点。
http://www.gnu.org/software/wget/
你可以试试这个来测试这个想法:
wget http://localhost/filename.ashx
我做了这样的事情早些时候我已经使用Windows的计划任务,把我的脚本在特定的时间间隔。
该怎么做?后台工作? – Aristos 2011-12-29 18:28:53
@Aristos yes如何让服务器每隔10分钟运行一次 – 2011-12-29 18:31:58