我剛剛學習.NET中一些關於Web服務(的.asmx和所有的東西)如何在.net中安排Web服務中的[WebMethod]?
對於我的項目,我需要安排一個程序,cralwels一組網站,然後更新新的可用數據的數據庫每30分鐘一次。
我創建了一個[WebMethod]
用於運行爬網程序代碼和數據庫更新(如果可用)。
但我希望這個[WebMethod]
自動運行並每30分鐘運行一次?
我剛剛學習.NET中一些關於Web服務(的.asmx和所有的東西)如何在.net中安排Web服務中的[WebMethod]?
對於我的項目,我需要安排一個程序,cralwels一組網站,然後更新新的可用數據的數據庫每30分鐘一次。
我創建了一個[WebMethod]
用於運行爬網程序代碼和數據庫更新(如果可用)。
但我希望這個[WebMethod]
自動運行並每30分鐘運行一次?
沒有必要創建一個WebMethod要做到這一點,你可以在服務器端,並安排作業,我總是用Quartz.net
這是Quartz.net可以安排我的任務,如果它託管在共享主機環境,IIS等? – ItsLockedOut 2012-01-15 16:04:38
@gustavo +1 for quartz.net看起來很有趣 – 2012-01-15 16:09:03
@ItsLockedOut是的,它可以,我通常在IIS上託管的asp.net網站上使用 – 2012-01-15 16:14:01
我可能是不正確的,但它看起來像你想安排一個背景使用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));
}
注菲爾哈克對The Dangers of Implementing Recurring Background Tasks In ASP.NET後,提供一些有用的技術使工藝更穩健。
你爲什麼要使爬網方法成爲Web方法? – Bas 2012-01-15 15:49:41
只要你知道,asmx是遺留的,你應該看看WCF。 – KMan 2012-01-15 15:53:35
@BasB:我需要安排時間,以便每隔30分鐘左右就可以獲得更新的數據庫。 – ItsLockedOut 2012-01-15 15:58:07