Доступ к одному и тому же работающему коду из службы Windows и консольного приложения? - PullRequest
0 голосов
/ 26 февраля 2009

У меня есть приложение, которое построено как сборка службы Windows и библиотеки ac # (.dll). Чтобы управлять этой службой и поддерживать ее, я хотел бы добавить возможность запуска приложения командной строки, которое сообщает последний раз, когда служба архивирует файлы, в следующий раз, когда это запланировано, состояние последнего запуска и местоположение файла, созданного службой.

Какова лучшая архитектура для написания сервиса и библиотеки, которая может обмениваться данными с другим приложением? Я использую .net 2.0.

Ответы [ 6 ]

2 голосов
/ 26 февраля 2009

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

2 голосов
/ 26 февраля 2009

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

1 голос
/ 26 февраля 2009

+ 1 только для того, чтобы сервис предоставил эти (и любые другие данные) при запросе (простой tcp, RPC, веб-сервис или что-то еще)

Я бы сделал это довольно общим - как

QueryInfo (некоторый идентификатор) с ответом в виде некоторой строки и возвращаемым значением или другим индикатором того, что служба не знает, о чем вы говорите, не может получить информацию или вернуть информацию

1 голос
/ 26 февраля 2009

Довольно простой подход - хранить эту информацию в локальном конфигурационном / текстовом файле, к которому имеют доступ оба приложения. Или даже поместить его в ключ реестра.

1 голос
/ 26 февраля 2009

Опции, которые приходят мне на ум в прошлом:

  • Сохранить информацию в базе данных (если у вас есть один с собой)
  • Реализация Поток типа «Монитор состояния» на сервис, который клиент может подключить и через TCP / IP и т. д.
1 голос
/ 26 февраля 2009

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

...