如何在.net中的Web Services中调度[WebMethod]

本文关键字:调度 WebMethod Services Web net 中的 | 更新日期: 2023-09-27 18:20:16

我刚刚学习了一些关于.net(.asmx和所有东西)中的web服务

对于我的项目,我需要安排一个程序,该程序加载一组网站,然后每30分钟将新可用的数据更新到数据库。

我已经创建了一个[WebMethod],用于运行爬网程序代码和数据库更新(如果可用)。

但我想让这个[WebMethod]自动化,每30分钟运行一次?

如何在.net中的Web Services中调度[WebMethod]

不需要创建WebMethod来实现这一点,您可以在服务器端进行,对于调度操作,我总是使用Quartz.net

我可能不正确,但看起来你想使用asp.net安排后台任务?我没有使用Quartz.Net,但我使用了Jeff Attwood提供的一个简单示例。以下代码来自Global.asax.cs,在应用程序启动时每60分钟安排一次重复作业:

void Application_Start(object sender, EventArgs e)
{
    var refreshMinutes = 60;
    AddTask("UpdateInfo", 
            (int)TimeSpan.FromMinutes(refreshMinutes).TotalSeconds);
}
private void AddTask(string name, int seconds)
{
    OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
    HttpRuntime.Cache.Insert(name, seconds, null,
        DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration,
        CacheItemPriority.NotRemovable, OnCacheRemove);
}
public void CacheItemRemoved(string key, object v, CacheItemRemovedReason r)
{
    if ("UpdateInfo".Equals(key))
    {
        try
        {
            new SearchService().UpdateInfo();
        }
        catch (Exception ex)
        {
            logger.Error("UpdateInfo threw an exception: {0} {1}", ex.Message, ex.StackTrace);
        }
    }
    AddTask(key, Convert.ToInt32(v));
}

注意:Phil Haack在《在ASP.NET中实现递归后台任务的危险》上发表了一篇文章,其中提供了一些有用的技术,可以使流程更加健壮。