Каков наилучший выбор для межпроцессного взаимодействия .NET?

Должен ли я использовать Named Pipes или .NET Remoting для связи с текущим процессом на моей машине?

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

Вот блог, в котором выполняется сравнение производительности WCF vs Remoting .

Цитата из блога:

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

Раздел MSDN для WCF

Если он находится на одной машине, Named Pipes дает вам лучшую производительность и может быть реализован как с удаленной инфраструктурой, так и с WCF. Или вы можете просто использовать System.IO.Pipes .

Если вы имеете в виду межпроцессное общение, я использовал .NET Remoting без каких-либо проблем. Если два процесса находятся на одной машине, связь выполняется довольно быстро.

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

Remoting в .NET Framework 2.0 обеспечивает канал IPC для межпроцессного взаимодействия на одном компьютере.

Если вы используете .NET Framework 3.0 или выше, я бы использовал WCF. Используя WCF, вы можете использовать различные привязки, зависящие от компромисса между производительностью / interop / etc. что вам нужно.

Если производительность не является критичной, и вам необходимо взаимодействовать с другими технологиями веб-сервисов, вы захотите использовать привязку WS-HTTP. Для вашего случая вы можете использовать WCF с привязкой net-tcp или привязкой named-pipe. Либо надо работать.

Мой личный подход заключается в том, что подход WCF более чист, так как вы можете выполнять службы, основанные на контрактах, и сосредоточиться на сообщениях, а не на объектах (я делаю обобщение здесь на основе моделей программирования по умолчанию для WCF / .NET Remoting). Мне не нравится отправлять объекты через провод, потому что много семантической информации теряется или неясно. Когда все, что вы делаете, отправляет такое сообщение, как вы с WCF, становится легче разделить свои проблемы между коммуникациями и classами / инфраструктурой, из которых состоит один узел.

.Net remoting не является протоколом сам по себе. Он позволяет выбрать, какой из протокалов использовать: SOAP, named-pipes и т. Д.

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

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

  • Как Ctrl-C завершает дочерний процесс?
  • Подождите, пока процесс не завершится
  • Запуск процесса в Java?
  • Visual Studio «Не удалось скопировать» ... во время сборки
  • В чем разница между процессом и streamом?
  • Как я могу запускать и забывать процесс в Perl?
  • Убивание процесса с использованием Java
  • Получить возвращаемое значение из процесса
  • Убить дочерний процесс, когда родительский процесс убит
  • Как убить процесс с помощью Vb.NET или C #?
  • Как записать вывод в переменную из внешнего процесса в PowerShell?
  • Давайте будем гением компьютера.