Общаетесь с / отправляете инструкции службам Windows? - PullRequest
1 голос
/ 28 июня 2011

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

В настоящее время нет способа отслеживать или запрашивать состояние процесса, выполняемого службой, хотя мы можем запросить саму службу, чтобы узнать, выполняется ли она в Windows или нет.

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

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

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

Какой метод следует использовать, чтобы начать отправку и получение этих сообщений?

Ответы [ 2 ]

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

Существует несколько методов Межпроцессное взаимодействие . Вам доступны самые очевидные варианты: Named Pipes или Sockets.

Любой из них будет работать нормально, однако вместо того, чтобы пытаться реализовать их напрямую, я бы вместо этого рекомендовал вам разместить службу WCF (внутри службы Windows) и использовать ее для межпроцессного взаимодействия.

Службы WCF можно легко настроить для использования в качестве основного транспортного механизма сокетов или именованных каналов (а также ряда менее подходящих вариантов), а также для упрощения разработки систем IPC (межпроцессное взаимодействие).

Существует множество информации о Сервисах WCF и о том, как внедрить Сервис WCF в Интернете - просто попробуйте Google.

(Если по какой-то причине вы используете .Net 2.0 вместо .Net 3.5 или выше, вам следует вместо этого взглянуть на .Net Remoting - по сути, он является предшественником WCF и работает совершенно по-другому, однако в основном достигает тоже самое).

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

Вы можете разместить службу WCF внутри и использовать эту службу для запроса статуса

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