2013-02-27 7 views
0

У меня проблема с сервисом Windows - после развертывания при попытке выполнить попытку service_Start сбой (тайм-аут). Во второй попытке это в основном преуспевает. Я пытался увеличить таймаут, но это не помогло. Служба не имеет зависимостей.Ошибка запуска команды запуска после развертывания

Это c# + Topshelf (latest) приложение, которое использует контейнер Castle.Windsor (2.5.3). Основной класс, реализующий IMyService, зарегистрирован в lifestyleType Singleton. Другие зависимости зарегистрированы как transient.

Служба считывает сообщения с шины Кролика и хранит их в Couchbase.

Код конфигурации выглядит следующим образом:

HostFactory.Run(x =>         
      { 
       x.Service<IMyService>(s =>       
       { 
        s.ConstructUsing(name => WindsorContainerContext.Container.Resolve<IMyService>()); 
        s.WhenStarted(s => s.Start());    
        s.WhenStopped(s => 
            { 
             s.Stop(); 
             WindsorContainerContext.Container.Release(s); 
             WindsorContainerContext.Container.Dispose(); 
            }); 
       }); 
       x.RunAsLocalSystem();        

       x.SetDescription(serviceDescription); 
       x.SetDisplayName(serviceDescription);      
       x.SetServiceName(serviceName); 

      });  

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

Я знаю, этого может быть недостаточно, чтобы решить эту проблему - дайте мне знать, какая информация будет полезна. Мне бы очень хотелось узнать, что здесь происходит, поэтому я также буду признателен, если вы сможете указать мне в правильном направлении с точки зрения отладки этого.

+0

У вас, похоже, нет проблем с точки зрения разрешения, поскольку служба работает, как ожидалось, во второй попытке. Я бы предложил вам отладить метод запуска службы, потому что обычно тайм-аут вызван кодом в этом методе. –

+0

@ Kokulan - Я не совсем уверен, как это сделать при отладке, до сих пор я не мог получить никаких отказов в режиме отладки. Метод start запускает новую задачу, которая начинает потреблять сообщения из шины и сохраняет их в Couchbase. Там не так много, все красиво завернуты в блоки try/catch, поэтому, что бы ни случилось, они должны обрабатываться. –

+0

. Вы можете зарегистрировать активность и время в файле журнала в методе start. Обычно я пишу основные действия в методе start для файла журнала и смотрю, что произошло, поскольку во время отладки его нелегко поймать. Вы можете сравнить журнал в первый раз и последующий старт. Надеюсь, поможет. –

ответ

0

Так как консольное приложение, обычная отладка, обычно не будет таймаутом.

Таким образом, вы можете запросить больше времени, но я бы начал с запроса, как 20-30 секунд. Если вы просите слишком много времени, менеджер сервиса просто игнорирует ваш запрос и не говорит вам.

Смежные вопросы