У меня проблема с сервисом 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);
});
Я думал, что, возможно, что-то не получает выпущен должным образом и вызывает запуск на неудачу, но после того, как попробовал несколько изменений, я действительно не имею представления, что еще попробовать.
Я знаю, этого может быть недостаточно, чтобы решить эту проблему - дайте мне знать, какая информация будет полезна. Мне бы очень хотелось узнать, что здесь происходит, поэтому я также буду признателен, если вы сможете указать мне в правильном направлении с точки зрения отладки этого.
У вас, похоже, нет проблем с точки зрения разрешения, поскольку служба работает, как ожидалось, во второй попытке. Я бы предложил вам отладить метод запуска службы, потому что обычно тайм-аут вызван кодом в этом методе. –
@ Kokulan - Я не совсем уверен, как это сделать при отладке, до сих пор я не мог получить никаких отказов в режиме отладки. Метод start запускает новую задачу, которая начинает потреблять сообщения из шины и сохраняет их в Couchbase. Там не так много, все красиво завернуты в блоки try/catch, поэтому, что бы ни случилось, они должны обрабатываться. –
. Вы можете зарегистрировать активность и время в файле журнала в методе start. Обычно я пишу основные действия в методе start для файла журнала и смотрю, что произошло, поскольку во время отладки его нелегко поймать. Вы можете сравнить журнал в первый раз и последующий старт. Надеюсь, поможет. –