Служба Windows C # падает, не нажимая блок catch - PullRequest
1 голос
/ 23 января 2012

У меня есть служба Windows C #, которая падает почти каждый день после нескольких часов работы. Недавно я добавил блоки catch к буквально каждому методу, и все же это не помогает. Поскольку я использую асинхронные обратные вызовы в MSMQ, я предполагаю, что могут быть проблемы с многопоточностью, но я не имею четкого представления. Любое понимание этой проблемы будет очень полезно. Вот псевдокод:

public MyService : ServiceBase
{
  onStart()
  {
    try
    {
      someQueue.BeginReceive()
    }
    catch(Exception e)
    {
      log error and throw
    }
  }

  void someQueue_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
  {
    try
    {
     //process the message
    }
    catch(Exception e)
    {
       //log
    }
    finally
    {
      someQueue.Refresh()
      someQueue.BeginReceive();
    }
  }
}

Ответы [ 2 ]

1 голос
/ 17 марта 2013

Вы можете проверить программу просмотра событий, чтобы узнать причину остановки службы.

Откройте меню «Пуск» и запустите Просмотр событий, в разделе приложения вы найдете ошибку

0 голосов
/ 05 июня 2019

Я знаю, что годы прошли с этого запроса.Но у меня возникла та же проблема, и ни одно решение не помогло мне, кроме следующего.В моем случае, Просмотр событий не давал никаких подробностей о сбое, и все права пользователя были в порядке.проблема заключалась в строке кода в методе OnStart:

Debugger.Launch();

Он пытался запустить отладчик, но он не был установлен на этом сервере.Как таковой, он никогда не завершался, и мой код не обнаружил никаких исключений.Избавился от этого, и он начал работать.

...