因为它是一个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