Приложение WPF: межпроцессное взаимодействие для приложения с несколькими экземплярами

Я разработал составное приложение WPF, которое устанавливается через MSI в c:\Program Files\WPFAPP1 на Windows Server 2008.

Из-за ограничения целевой системной среды несколько пользователей локальной учетной записи Windows запустили основной файл .exe (и, таким образом, каждый из них запустил экземпляр этого приложения WPF) с удаленного компьютера с помощью ссылки .RDP.

Каждый пользователь Windows является известным пользователем приложения WPF (права доступа пользователя).

Я хотел бы разработать компонент .NET для обмена данными между пользователями и предоставить функцию, подобную мессенджеру: могу ли я добиться этого с помощью службы WCF с именованными каналами, пожалуйста?

Спасибо за ответ,


person user4953001    schedule 27.07.2015    source источник
comment
Я думаю, что ваш вопрос в его нынешнем виде слишком велик, чтобы получить разумные ответы. WCF, безусловно, можно использовать для обеспечения связи между приложениями, но это может быть не лучший выбор для каждой ситуации. Вы толком не определили свою ситуацию - какими данными вам нужно поделиться? Это чувствительно ко времени? Это байты/килобайты/мегабайты/терабайты? Пользователей 3 или 3000? Каковы требования безопасности? Есть ли ограничения на открытие портов для сообщений? Другие проблемы, связанные с брандмауэром?   -  person goobering    schedule 27.07.2015
comment
- Данные: файл PDF размером до 2 МБ - Обмен файлами в режиме реального времени (похож на Lync) - От 3 до 5 отдельных пользователей (1 экземпляр приложения WPF на пользователя) - Требования безопасности: очень низкие, я субподрядчик по разработке и Хост-машина — это ноутбук на борту судна посреди океанов или морей. - Порт и сообщение: я являюсь локальным администратором хоста и могу открыть любой порт на хосте ОС (команда DOS, Powershell...). Я не рассматриваю TCP-транспорт WCF, потому что компонент будет работать на том же хосте.   -  person user4953001    schedule 27.07.2015


Ответы (1)


Это возможно, но далеко от идеального решения. Я использовал именованные каналы для связи между процессами, но только для сигнализации времени, когда нужно было синхронизировать 2 процесса. Он был не очень надежен и имел свои недостатки.

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

По сути, вам было бы гораздо лучше создать архитектуру клиент/сервер с использованием WCF и заставить клиентов отправлять сообщения на сервер для распространения среди других клиентов. Вы можете использовать дуплексный канал, такой как NetTcp или WsHttp, для отправки сообщений с сервера на клиент или попросить клиентов опрашивать сервер на наличие новых сообщений.

person Glen Thomas    schedule 27.07.2015
comment
Спасибо за ответ! Я обязательно попробую дуплексную связь WCF. - person user4953001; 28.07.2015
comment
Вы можете создать службу WCF и разместить ее в службе Windows на компьютере. Используйте какую-либо базу данных для сохранения любых данных. - person Glen Thomas; 28.07.2015