Использование TopShelf для создания простой службы MQ Windows

#c# #windows-services #topshelf

#c# #windows-services #topshelf

Вопрос:

Я использую Topshelf для создания простой службы чтения MQ. Поскольку доступной документации мало, я столкнулся с некоторыми, вероятно, простыми вопросами, на которые, я надеюсь, получу ответы здесь:

1) В целом — было бы очень неплохо получить фактический экземпляр servicebase моего экземпляра service, поскольку существует множество методов, к которым я хотел бы получить доступ. Как я могу это сделать?

2) Когда вызывается onStop, я хотел бы сбросить MQ и быстро обработать оставшиеся сообщения. Однако доступ к MQ в OnClose вызывает исключение доступа к MQ — это специально или?

3) Я указал перегрузки onPause и OnContinue в конфигураторе. Однако — служба не включена для приостановки / продолжения, поскольку флаг AllowPauseAndContinue не установлен. Каков наилучший способ сделать это?

         var retVal = HostFactory.New( x =>
                        {
                            x.Service<ASForwardMessageService>( s =>
                            {
                                s.SetServiceName( s_ServiceName );
                                s.ConstructUsing( name => CreateService() );
                                s.WhenStarted( tc => tc.OnStart() );
                                s.WhenStopped( tc => tc.OnStop() );
                                s.WhenPaused( tc => tc.OnPause() );
                                s.WhenContinued( tc => tc.OnContinue() );
                            } );

                            x.RunAsLocalSystem();

                            x.DependsOnMsmq();

                            x.StartAutomatically();

                            x.SetDescription( s_Description );
                            x.SetDisplayName( s_DisplayName );
                            x.SetServiceName( s_ServiceName );
                        } );
  

Кстати — есть ли какая-либо документация, доступная для проекта Topshelf — было бы очень неплохо иметь под рукой.

Спасибо за отличную библиотеку!

Комментарии:

1. Какую версию TopShelf вы используете?

Ответ №1:

https://github.com/Topshelf/Topshelf/wiki для документации также есть http://topshelf-project.com / но у нас на самом деле не так много документов там. Возможно, это также лучше обсудить для нашего списка рассылки.

  1. Мы не раскрываем это, хотя, я думаю, возможно, что мы могли бы использовать новые события до и после установки (http://legomaster.net/2011/02/announcing-topshelf-2-2 /). Общая идея заключается в том, что все, что вам нужно будет установить, будет доступно через наш конфигурационный API. К каким элементам внимания, к которым, по вашему мнению, вы хотите получить доступ, которого у вас сейчас нет?

  2. Какое исключение вы видите? В дизайне Topshelf нет ничего, о чем я знаю, что должно вызывать эту проблему.

  3. CanPauseAndContinue не установлено; напишите о проблеме в нашем сервисе отслеживания проблем на github, и я думаю, что это то, что можно решить.

Комментарии:

1. 3. «SetPausable» в настоящее время находится в запросе на извлечение: github.com/Topshelf/Topshelf/pull/92