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

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

8 ответов

Решение

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

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

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

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

Раздел MSDN для WCF

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам