2012-05-09 136 views
2

我想确保一个链接在我的网站内建立一天(而且只有一次).net, 我在一个共享服务器上,所以不能运行一个可执行文件 - 不能访问24小时开启的电脑来创建预定任务。每天点击一次URL

我有什么选择?

+0

你能澄清一下,是否每天一次关于应用程序重启?结果是否需要保存?如果应用程序重新启动,结果是否需要从磁盘读回结果? –

+0

@MAfifi - essentnally我需要执行一段代码,做一些事情包括保存到db.by hiting一个网址,我可以执行代码块 – raklos

回答

1

您可以使用缓存类 - 在添加新的缓存条目时,您可以将其设置为在24小时后过期,并在事件处理程序过期时传递它以执行。

在事件处理程序中,您可以重置高速缓存条目。

Cache.Add见和参数为onRemoveCallback

onRemoveCallback - 类型:System.Web.Caching.CacheItemRemovedCallback 的是,如果提供的话,当对象被从缓存中移除被称为委托。您可以使用它来通知应用程序何时将其对象从缓存中删除。

1

cron工作可能吗?然后

0 0 * * * curl -q http://www.example.com/page.aspx 
+1

»并且无法访问24小时开启的PC创建一个计划任务« - 你可以改为建议一个WebCron服务。 – Joey

0

你最好的选择将是一个静态构造函数+定时器+一些安全防范要确保它每天只运行一次。

您可能想要改善这一点,以确保一些事情,不要等待第一次运行一整天。如果上一次运行是23小时前,请不要等待一整天。有些数学基本上确保下一次运行距离运行24小时。

喜欢的东西,

private static DateTime _lastNavigated; 
private static Timer _myTimer 

static MyObject() 
{ 
    _myTimer = new Timer(24 * 60 * 60 * 1000); 
    _myTimer.Elapsed += MyOnceADayCode; 
    _myTimer.Enabled = true; 
} 

public static void MyOnceADayCode(object source, ElapsedEventArgs e) 
{ 
    _lastNavigated = DateTime.UtcNow; 
    if (DateTime.UtcNow > _lastNavigated.AddDays(1)) 
    { 
     // Haven't navigated in the last day, need to navigate again 
    } 
} 

另一个想法(根据您的帐户是否有访问),是创建(使用代码)计划任务。那里有一些很好的包装类,它们使用COM为你完成所有的工作。您仍然需要一个静态构造函数来确保代码在应用程序加载时执行。

0

要使用ASP.NET在您的网站内执行计划任务,建议您阅读this article