2011-12-29 41 views
0

我有IIS7.5。我们目前对我们网站上的实体拥有加权评级。计算加权等级的速度非常慢,因此加载主页现在需要超过10秒才能加载。IIS7是否可以让它每5分钟运行一次网页?

为了解决这个问题,我想将权重存储在每个实体的数据库中,并让IIS每5-10分钟运行一次脚本以重新计算权重。

我该如何去做这件事?如果它运行网页网址,对我来说最简单。

+0

该怎么做?后台工作? – Aristos 2011-12-29 18:28:53

+0

@Aristos yes如何让服务器每隔10分钟运行一次 – 2011-12-29 18:31:58

回答

2

不想要使用的客户端,仅服务器不断调用此功能,您可以在服务器上创建一个线程调用的函数计算它。

启动线程或计时器的更好方法是在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 
    } 
} 

}

+0

谢谢,这看起来最简单。我对Global.asax不太熟悉,我会假设这会使用客户端请求来处理,但是哪个会偶尔会导致一个客户端长时间加载页面? – 2011-12-29 18:36:17

+0

我有这个问题,Timer()不允许带4个参数的构造函数。我在ASP.net 4.0上。然而,我发现这个(http://www.mikesdotnetting.com/Article/129/Simple-task-Scheduling-using-Global.asax),它可以使用非常类似的东西,我可以使用 – 2011-12-29 18:41:17

+0

使用System.Threading.Timer 。有一个System.Timers.Timer,但有其他用法。 – LawfulHacker 2011-12-29 18:59:28

3

您可以使用Cache条目进行此设置,将来设置为过期10分钟。

当您添加该项目时,请使用CacheItemRemovedCallback参数的回调函数 - 在此回调函数中执行您的数据库并重新添加到期的缓存条目。

其他选项包括:

Windows服务和时间表任务仍然需要您有某种方法将结果传递给IIS。

+0

谢谢,不要太热衷于缓存,尽管这个过程会变得越来越慢,我不想让访问者偶尔有长时间的页面加载。 – 2011-12-29 18:35:05

+0

@TomGullen - 不知道为什么会有任何方位?缓存条目仅作为使用Web命名空间的“计时器” - 仅用于触发将计算内容的回调。它可以包含垃圾(比如'null'),不能在任何地方使用。由于它使用回调,因此它将使用单独的线程,并且不会对任何用户造成任何影响。 – Oded 2011-12-29 18:37:00

+0

哦,好吧!谢谢你,还是新的缓存 – 2011-12-29 18:40:28

3

一种方法是使用Windows服务,而不是调用Web URL。

然后,它可以在背景中完全带外运行以执行计算。这个细节在这里:

http://msdn.microsoft.com/en-us/library/d56de412%28v=VS.100%29.aspx

一些优势包括:

  • 你的IIS进程将不会受到影响,所以你的用户会看到没有放缓
  • 的服务能够被停止独立于网站启动

但是,您需要有合理的完全访问权限才能安装并运行服务器e服务。

+0

谢谢,现在就看看这个。 – 2011-12-29 18:31:35

+1

当然,还有一些在IIS进程和Web服务之间进行通信的方式。 – Oded 2011-12-29 18:33:15

+0

可能:它可能就像执行计算并将它们写入某个表格一样简单。 – 2011-12-29 18:47:11

-1

一个简单的WGET或类似的批处理文件,以及来自计划任务的帮助将做到这一点。

http://www.gnu.org/software/wget/

你可以试试这个来测试这个想法:

wget http://localhost/filename.ashx 
0

我做了这样的事情早些时候我已经使用Windows的计划任务,把我的脚本在特定的时间间隔。

相关问题