2011-01-06 127 views
1

我有一个WCF服务应用程序项目与一个REST服务,它的InstanceContextMode设置为单一。它包含一个我想用来定期检查注册的计时器。WCF服务应用程序定时器

定时器不会启动,直到有人第一次呼叫该服务为止。我想知道的是,ASP.NET网站中是否存在某种类似的超时,如果没有人使用它,或者定时器继续运行,IIS将停止服务。

[ServiceContract] 
public interface IRegistrationService 
{ 
    [OperationContract, WebGet...] 
    void Register(...); 
} 

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class RegistrationService : IRegistrationService 
{ 
    private Timer timer; 
    public RegistrationService() 
    { 
     this.timer = new System.Timers.Timer(1000 * 60 * 5); 
     this.timer.Elapsed += OnTimerElapsed; 
     this.timer.Start(); 
    } 

    private void OnTimerElapsed(object sender, ElapsedEventArgs e) 
    { 
     // 
    } 
} 

回答

1

它会继续运行,直到主机应用程序启动并运行。如果您的服务托管在IIS中并且Keep-Alive被禁用,它将被关闭,但是在winforms或windows服务主机的情况下,对象将一直持续直到应用程序关闭。要关闭此对象,请使该服务处于Disposable状态,并在timerElapsed时处理该类。

+0

我的服务托管在IIS中。我使用称为TSOHost的第三方托管,我认为他们使用IIS7,显然Keep-Alive默认启用,但我不能说我记得在我的主机配置页面看到这个设置。谢谢,我会检查这是否启用。 – sfsdfsdf 2011-01-06 11:51:28

相关问题