Вызовите метод / обработчик события в службе Windows из размещенной службы WCF. - PullRequest
0 голосов
/ 23 мая 2011

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

У меня есть управляемая служба Windows, которая работает хорошо.Каждые n (> 5) секунд он проверяет состояние (например, потребление памяти) некоторых процессов и других служб Windows, а также выполняет ведение журнала базы данных и при необходимости вызывает события.

Я намереваюсь создать ASP.NETвеб-сайт, который позволит пользователям запрашивать состояние процессов, которые отслеживает служба Windows.Изучив варианты, похоже, что современный метод заключается в использовании службы WCF, размещенной в службе Windows, в качестве посредника между веб-сайтом ASP.NET и службой Windows.Таким образом, пользователь может запросить через браузер моментальный снимок текущего состояния любого набора процессов, за которым следила служба Windows, и ретранслировать этот запрос и последующий ответ через службу WCF (я думаю, с использованием именованных каналов).

Итак, моя трудность заключается в том, что в службе Windows есть набор методов и событий, для которых существует один корневой объект (скажем, MonitorObject).Я не понимаю, как можно создать экземпляр ServiceHost со ссылкой на MonitorObject, чтобы служба WCF могла вызывать методы в службе Windows.Я думаю, что, возможно, мне нужно сделать объект Monitor общим (я VB'ing) членом класса Windows Service (который содержит OnStart и OnStop) и сделать все события общими, чтобы служба WCF могла просто получить доступ к WindowsService..SharedMonitorObject без необходимости передавать объект ....

Однако я теряюсь в теме и ищу любой совет о том, как лучше поступить.

Заранее спасибо.

1 Ответ

1 голос
/ 23 мая 2011

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

Существует шаблон проектирования под названием Singleton Pattern, который поможет вам в этом. Джон Скит написал превосходную статью о некоторых вещах, о которых следует помнить при использовании этого шаблона в .NET. Его статья использует C # для примеров, но вот SO вопрос, ссылающийся на этот шаблон с использованием VB.

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

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