2012-01-15 47 views
2

我剛剛學習.NET中一些關於Web服務(的.asmx和所有的東西)如何在.net中安排Web服務中的[WebMethod]?

對於我的項目,我需要安排一個程序,cralwels一組網站,然後更新新的可用數據的數據庫每30分鐘一次。

我創建了一個[WebMethod]用於運行爬網程序代碼和數據庫更新(如果可用)。

但我希望這個[WebMethod]自動運行並每30分鐘運行一次?

+0

你爲什麼要使爬網方法成爲Web方法? – Bas 2012-01-15 15:49:41

+4

只要你知道,asmx是遺留的,你應該看看WCF。 – KMan 2012-01-15 15:53:35

+0

@BasB:我需要安排時間,以便每隔30分鐘左右就可以獲得更新的數據庫。 – ItsLockedOut 2012-01-15 15:58:07

回答

5

沒有必要創建一個WebMethod要做到這一點,你可以在服務器端,並安排作業,我總是用Quartz.net

+0

這是Quartz.net可以安排我的任務,如果它託管在共享主機環境,IIS等? – ItsLockedOut 2012-01-15 16:04:38

+0

@gustavo +1 for quartz.net看起來很有趣 – 2012-01-15 16:09:03

+0

@ItsLockedOut是的,它可以,我通常在IIS上託管的asp.net網站上使用 – 2012-01-15 16:14:01

0

我可能是不正確的,但它看起來像你想安排一個背景使用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後,提供一些有用的技術使工藝更穩健。