2016-03-11 3 views
-1

У меня есть служба Windows, которая каждые 15 минут запускается для синхронизации данных через веб-службу HTTP REST. Кажется, что он обходит 128 HTTP PUTS через пару сотен запросов, а затем просто останавливается без ошибок. Есть ли какой-то тайм-аут процесса, который может вызвать проблему? Если да, то как я могу это изменить. Я пишу каждую запись в EventViewer, проходит ли она или не работает, и я не вижу ясных ошибок.Служба Windows OnTimer останавливается до завершения процесса

+1

Нет, нет такого ограничения. Скорее всего, это ошибка в коде. – nvoigt

+0

Вы останавливаете таймер во время процесса, а затем снова запускаете его после завершения. Я подозреваю, что ваша обработка может быть нарушена таймером снова, прежде чем ваша обработка будет завершена. Имейте в виду, что это строго «удар в темноте», поскольку вы не показали нам никакого кода. – Kevin

+0

Я думал, что это так, но я запустил код на странице ASP.NET, и он отлично работал. Я подсчитал количество времени и удвоил его для события таймера, чтобы устранить это как проблему. Поскольку существует так много HTTP-запросов, я собираюсь поместить каждый блок вызовов в отдельный поток, чтобы узнать, помогает ли это. –

ответ

0

Если вы используете код System.Timers.Timer, чтобы выполнить код, вероятность того, что обработчик прошедшего времени проглотил исключение.

Wrap your entire handler in a try catch block, and rethrow the exception on the threadpool. Что-то вроде этого:

void elapsed_handler(object sender, EventArgs e) 
{ 
    try 
    { 
     DoWork(); 
    } 
    catch (Exception ex) 
    { 
     ThreadPool.QueueUserWorkItem(
     _ => { throw new Exception("Exception on timer thread.", ex); }); 
    } 
} 
Смежные вопросы