Начинающий Windows Service / WCF и реализация интерфейса пользовательского интерфейса Вопрос - PullRequest
2 голосов
/ 12 марта 2011

Я пытаюсь выяснить, как лучше всего подойти к этому дизайну ... Вот кое-что из того, что я пытаюсь сделать:

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

Я читал о Windows Communication Foundation (WCF), и это кажется хорошим способом сделать это. Поскольку служба Windows будет спокойно продолжать опрос ввода-вывода, и любые клиенты, которые подключаются к интерфейсу WCF, могут представить эти данные в графическом интерфейсе.

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

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

1 Ответ

4 голосов
/ 12 марта 2011

Это именно то, как я это сделал - размещение службы WCF в службе Windows. Служба Windows - это процесс; Служба WCF - это место, где выполняется работа.

В моем случае мой CollectionService на основе WCF большую часть времени находится в режиме ожидания. Я использую WCF для запуска и остановки коллектора, потому что модель программирования WCF делает это легко. Однако для передачи данных из коллектора в пользовательский интерфейс я использую сокет TCP, а не WCF. Я знаю, что WCF имеет режим потоковой передачи, но (1) я никогда не использовал его и (2) я полагаю, что при таком использовании WCF есть некоторые издержки. Сокет для меня просто удобный запасной вариант, но я думаю, что WCF можно заставить работать.

Если вы только начинаете, вы можете обратиться к этим двум ответам для запуска и запуска службы Windows с использованием C #. Оттуда вам просто нужно создать ServiceHost и закрыть его в обратных вызовах OnStart() и OnStop() вашей службы Windows, соответственно.

Если вы новичок в WCF, взгляните на этот вопрос.

Хорошие и простые книги / учебные пособия для изучения последних вещей WCF

Еще одна вещь. В ходе вашей работы над этим может оказаться, что вы хотите, чтобы служба WCF предоставляла события для вашего пользовательского интерфейса при возникновении определенных событий. Например, вы можете предоставить событие, которое периодически уведомляет пользовательский интерфейс о количестве полученных байтов. Для этого я настоятельно рекомендую эту статью Ювала Лоуи, одного из богов WCF.

Что нужно знать об односторонних вызовах, обратных вызовах и событиях

Его среда публикации-подписки доступна бесплатно на его веб-сайте IDesign.net , а также рядом других действующих примеров WCF.

Надеюсь, это поможет.

...