如何在.net中的Web Services中调度[WebMethod]
本文关键字:调度 WebMethod Services Web net 中的 | 更新日期: 2023-09-27 18:20:16
我刚刚学习了一些关于.net(.asmx和所有东西)中的web服务
对于我的项目,我需要安排一个程序,该程序加载一组网站,然后每30分钟将新可用的数据更新到数据库。
我已经创建了一个[WebMethod]
,用于运行爬网程序代码和数据库更新(如果可用)。
但我想让这个[WebMethod]
自动化,每30分钟运行一次?
不需要创建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中实现递归后台任务的危险》上发表了一篇文章,其中提供了一些有用的技术,可以使流程更加健壮。