Консольное приложение для связи со службой Windows - PullRequest
5 голосов
/ 29 января 2010

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

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

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

Windows API SendMessage должен быть путь?

спасибо!

Ответы [ 3 ]

6 голосов
/ 29 января 2010

Я бы порекомендовал WCF как первое, что нужно учитывать для всех коммуникаций в Windows, если использовать .net как созданный для такого рода вещей и относительно простой в использовании. Поскольку вы исключаете TCP, я рекомендую использовать привязку именованных каналов 1002 *.

Существует также ряд оконных коммуникаций, доступных для внутримашинных коммуникаций. Именованные каналы (как уже упоминалось), Почтовые слоты , Общая память (файлы с отображением в памяти) и т. Д.

Мое предложение будет использовать именованные каналы либо с WCF, либо изначально.

1 голос
/ 29 января 2010

Вы меньше рискуете тупиков, если используете неблокирующие методы передачи сообщений. PostMessage или SendNotifyMessage лучше, чем SendMessage, потому что они не блокируют звонящего.

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

Вы также можете использовать сообщение WM_COPYDATA , чтобы передать больше, чем просто wParam и lParam. Если вы используете это сообщение с PostMessage, вам нужно быть осторожным, чтобы не освободить память до тех пор, пока приемник не закончит с ней. Безопаснее всего использовать SendMessage для WM_COPYDATA.

0 голосов
/ 29 января 2010

Общая память? Смотрите здесь для статьи о Codeproject, вот еще одна fastipc статья на том же сайте В блоге есть запись о том, как использовать файл с отображением в памяти для обмена через оболочку.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...