Рекомендуемый способ связи между процессами, запущенными на разных компьютерах в одной сети - PullRequest
3 голосов
/ 10 марта 2010

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

Я взглянул на эту статью MSDN по именованным каналам и настроил простой клиент-серверный проект, который отлично работал. Однако это были только два процесса, запущенные на одном и том же компьютере (поэтому для конструктора NamedPipeClientStream я передал "." В качестве параметра serverName). Попытка запустить этот же проект на отдельных машинах в одной сети привела к сбою клиентского процесса, сообщившего, что сетевой путь не найден.

Это может определенно , просто я могу передать неверную строку как serverName из клиентского процесса. (Я попробовал IP-адрес, а также то, что , по моему мнению, было сетевым именем машины, но, возможно, у меня был неправильный формат.) В любом случае, некоторая помощь в работе клиент-серверного IPC на отдельных машинах та же сеть будет высоко ценится. (Я также задаю этот вопрос, потому что я даже не знаю, является ли использование именованных каналов наиболее логичным решением.)

Ответы [ 2 ]

4 голосов
/ 10 марта 2010

Именованные каналы будут работать, но сложно заставить их работать, если все компьютеры не находятся в одном домене.

Другой вариант, конечно, просто использовать сокеты. Использовать сокеты не намного сложнее, чем использовать Named Pipes.

Наконец, если все приложения - .NET, то также можно использовать WCF. Основным преимуществом здесь является то, что вам не нужно беспокоиться о проводном протоколе, это просто серия вызовов методов. Хотя WCF добавляет некоторые издержки с точки зрения безопасности и конфигурации.

0 голосов
/ 25 марта 2010

MailSlots - это еще одна альтернатива, которая может работать для вас, она позволяет передавать сообщения на целевой компьютер или в локальную сеть.

У меня есть реализация с открытым исходным кодом, обернутая в библиотеку C #, которая может помочь. Он использует реализацию MailSlot для распространения по сети, но также использует окна сообщений WM_COPYDATA или потоки IOS для отправки сообщений всем процессам на одной машине. Это позволяет обойти ограничение, заключающееся в том, что только один процесс может читать сообщение MailSlot.

http://thecodeking.github.com/XDMessaging.Net/

...