У меня есть служба Windows, написанная на С#. Он имеет таймер внутри, который регулярно выполняет некоторые функции. Итак, скелет моего сервиса:
public partial class ArchiveService : ServiceBase
{
Timer tickTack;
int interval = 10;
...
protected override void OnStart(string[] args)
{
tickTack = new Timer(1000 * interval);
tickTack.Elapsed += new ElapsedEventHandler(tickTack_Elapsed);
tickTack.Start();
}
protected override void OnStop()
{
tickTack.Stop();
}
private void tickTack_Elapsed(object sender, ElapsedEventArgs e)
{
...
}
}
Он работает некоторое время (например, 10-15 дней), затем он останавливается. Я имею в виду, что сервис показывает, как работает, но он ничего не делает. Я делаю некоторые протоколирования, и проблема может быть таймером, потому что после интервала он не вызывает функцию tickTack_Elapsed.
Я подумывал переписать его без таймера, используя бесконечный цикл, который останавливает обработку на определенное время. Это также не элегантное решение, и я думаю, что он может иметь некоторые побочные эффекты в отношении памяти.
Таймер используется из пространства имен System.Timers, среда - это Windows 2003. Я использовал этот подход в двух разных службах на разных серверах, но оба они производят это поведение (поэтому я думал, что он каким-то образом связан с мой код или сама структура).
Кто-то испытал такое поведение? Что может быть неправильным?
Edit:
Я отредактировал обе службы. Один из них получил хороший пробный прием везде и больше. Второй получил таймер-отдых на регулярной основе. С тех пор ни одна из них не прекращалась, поэтому, если эта ситуация сохранится еще на одну неделю, я закрою этот вопрос. Спасибо всем за все.
Edit:
Я закрываю этот вопрос, потому что ничего не произошло. Я имею в виду, что я внес некоторые изменения, но эти изменения не очень актуальны в этом вопросе, и с тех пор обе службы работают без проблем. Пожалуйста, отметьте его как "Закрыто для не относящегося к делу больше".