因爲它是一個Web應用程序(例如,在VS2010了「WCF服務應用程序」項目類型),你可以連接到應用程序的事件。
默認情況下,該項目的模板類型不會創建一個Global.asax,所以你需要在「添加新項」,然後選擇「全局應用程序類」(這將不可用,如果你已經有了一個全球.asax,FWIW)。
然後,你可以使用開始和結束事件的應用程序啓動和停止計時器,所以是這樣的:
public class Global : System.Web.HttpApplication
{
private static readonly TimeSpan UpdateEngineTimerFrequency = TimeSpan.FromMinutes(10);
private Timer UpdateEngineTimer { get; set; }
private void MyTimerAction(object state)
{
// do engine work here - call other servers, bake cookies, etc.
}
protected void Application_Start(object sender, EventArgs e)
{
this.UpdateEngineTimer = new Timer(MyTimerAction,
null, /* or whatever state object you need to pass */
UpdateEngineTimerFrequency,
UpdateEngineTimerFrequency);
}
protected void Application_End(object sender, EventArgs e)
{
this.UpdateEngineTimer.Dispose();
}
}
首先感謝您的答案! 是IIS中的一個webapp(webservice)。 這個動作(點1)在這個項目中非常重要。我必須避免並嘗試獲得最佳解決方案,以避免糟糕的表現或停止服務。相同的web服務向所有300臺服務器請求一些信息(x在x分鐘內 - 使用套接字請求信息)並且用作服務以向客戶端應用提供更新信息。 我需要使用System.Threading.Timer,但我必須找到最好的解決方案。 你知道我是否應該在這裏使用任何模式?從任何書籍的任何好信息你的文章? 再次感謝 – rbfigueira 2010-08-10 10:39:41
我需要在web服務使用System.Threading.Timer但我必須找到使得它的最佳解決方案。狀態信息來自300多個不同和不同的服務器。我必須每10-10分鐘一次(使用套接字請求信息)。 謝謝 – rbfigueira 2010-08-10 10:45:17
重寫了特定於WCF webapp/webservice場景的答案,並給出了一些示例代碼 – 2010-08-11 04:24:17