Создание и использование службы Windows на C # - PullRequest
1 голос
/ 28 июля 2011

У меня Windows 2008 R2 Server с IIS 7.5. В настоящее время я использую WCF для предоставления интерфейса снаружи, где код затем вызывает подпрограммы из моих DLL.

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

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

Вот более или менее пример того, что я собираюсь сделать:

Допустим, я создал и установил пример службы, изображенной здесь: http://blogs.msdn.com/b/bclteam/archive/2005/03/15/396428.aspx

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

Спасибо!

Ответы [ 7 ]

1 голос
/ 28 июля 2011

Вы можете отправлять пользовательские команды в службу Windows, но это только целые значения:

protected override void OnCustomCommand(int command)

Лучшим решением является связь со службой Windows по «именованным каналам». Лучший способ реализовать это - ИМХО создать службу WCF с привязкой NetNamedPipe и разместить ее в самой службе Windows.

1 голос
/ 28 июля 2011

Вы можете использовать WCF для связи со своей службой Windows.

На самом деле, допустим, у вас есть библиотека классов с некоторыми API, которые вы хотели бы сделать доступными, например, демоном в сети, на этом компьютере не требуется вход пользователя в систему ...

у вас может быть конечная точка WCF, которая предоставляет API-интерфейсы вызывающим абонентам и размещает эту службу в IIS или в службе Windows, единственное отличие состоит в том, как вы размещаете WCF (IIS делает это для вас с использованием для файла .svc службе Windows требуется немного кода для запуска объекта размещения WCF); после этого почти все остается прежним.

0 голосов
/ 28 июля 2011

Итак, вам нужна служба Windows, которая выполняет ряд запланированных действий, а также может прослушивать запросы через WCF для выполнения действий по требованию. Я правильно поняла?

Вот документ MSDN, объясняющий, как создать службу Windows, которая реализует службу WCF: http://msdn.microsoft.com/en-us/library/ms733069.aspx

0 голосов
/ 28 июля 2011

МПК можно сделать разными способами:

0 голосов
/ 28 июля 2011

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

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

0 голосов
/ 28 июля 2011

Вы должны использовать ServiceController.Если у вас есть экземпляр ServiceController, вы можете вызвать ExecuteCommand (int).ExecuteCommand будет вызывать OnCustomCommand в вашем экземпляре службы, если ваша команда не является Start / Stop / Pause.Просто переопределите OnCustomCommand, и вы должны установить ...

Справочник по ServiceController:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx

0 голосов
/ 28 июля 2011

Вы смотрели на это: http://msdn.microsoft.com/en-us/library/ms733069.aspx

Кроме того, если вы хотите простой способ отладки вашего сервиса в визуальной студии, я написал об этом в блоге: http://blog.tomasjansson.com/2010/11/debugging-your-windows-service-in-visual-studio/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...