【问题标题】:WCF Service Application TimerWCF 服务应用程序计时器
【发布时间】:2011-06-04 14:27:14
【问题描述】:

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

在有人第一次调用服务之前,计时器不会启动。我想知道的是,在 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)
    {
        // 
    }
}

【问题讨论】:

    标签: c# .net wcf timer wcf-rest


    【解决方案1】:

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

    【讨论】:

    • 我的服务托管在 IIS 中。我正在使用名为 TSOHost 的第三方托管,我认为他们使用 IIS7 并且显然默认情况下启用了 Keep-Alive,但我不能说我记得在我的主机配置页面中看到了此设置。谢谢,我会检查它是否已启用。
    猜你喜欢
    • 2013-09-30
    • 2016-02-29
    • 1970-01-01
    • 2013-11-25
    • 2010-12-21
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多