我是 WCF 的新手,所以也许这是最好的另一种方式。
现在我有一组 WCF 服务,但我正在尝试构建每周发送电子邮件的功能。为此,我使用以下代码构建了另一个 WCF 服务:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, AutomaticSessionShutdown = false)]
public class TimerService : ITimerService
{
private static Timer timer;
private static TimeSpan tSpan = new TimeSpan(0, 0, 20, 0);
private static OtherService Ref = new OtherService();
public void ToggleEmailTimer(bool enabled)
{
if (enabled)
timer = new Timer(new TimerCallback(TimerElapsed), null, tSpan, tSpan);
else
{
if(timer != null)
timer.Dispose();
}
}
private void TimerElapsed(object state)
{
Ref.SendWeekly();
}
}
它开始被禁用,我从一个 aspx 页面启用它。为了测试,我已经设法让这个工作间隔 10 分钟,它似乎在将间隔设置为 15 分钟的某个地方中断了。
对我来说,WCF 服务会话似乎因不活动而到期,这可以解释为什么计时器会停止。有没有办法指定 WCF 服务的生命周期,以便我可以从 aspx 页面启用计时器,退出,并且计时器服务将持续存在?我已经看到有关设置超时值的信息,但我仍然不清楚这是否适用。