IPC между приложением C # и другими приложениями в C ++ и VB.Net - PullRequest
1 голос
/ 13 мая 2011

У меня есть приложение на сервере C #, и оно должно общаться и контролировать еще 3 клиентских приложения: одно в C #, одно в C ++ и одно в VB.Net.Все они являются приложениями Windows Form.Они в основном должны обмениваться некоторыми строками и числами, не сильно загруженными.Каков наилучший способ сделать IPC между C # и этими разными языками?Обратите внимание, что клиенты не общаются друг с другом, они только общаются с сервером.

C # должен общаться с C ++, поэтому я полагаю, что WCF не годится, поскольку WCF работает только между двумя приложениями .Net?

Могу ли я удобно использовать именованные каналы на всех этих языках: C #, C ++ и VB.Net?

Я также хочу знать, нужно ли в будущем добавлять сценарии VB6, VBScript и PowerShell какклиенты, что будет лучшим вариантом IPC, который работает для всех этих 6 языков?Смогу ли я использовать именованные каналы?

Ответы [ 3 ]

1 голос
/ 13 мая 2011

На самом деле WCF, настроенный для предоставления сервисов через HTTP, может быть лучшим вариантом для списка языков, которые вы хотите поддерживать.

Если вам не нравится WCF, подумайте о предоставлении интерфейсов HTTP REST, т. Е. Написав сервер в ASP.Net MVC.

Поддержка именованных каналов - C # / VB.Net, C ++ - хорошо, VB6 - не знаю, VBScript - определенно не из коробки, PowerShell - да, поскольку он может использовать .Netбиблиотеки.

1 голос
/ 13 апреля 2012

Самые быстрые решения для перечисленных вами языков - это именованные каналы и, что еще лучше, файлы с отображением в памяти. Оба имеют реализации в .NET 4.0 и неуправляемый C ++.

Я бы порекомендовал просмотреть файлы, отображенные в памяти. Относительно просто создать файл и связанное с ним представление, которые служат однонаправленным каналом с одним производителем, с несколькими потребителями. Вы можете использовать, скажем, первые 4 байта области для хранения обновленного значения последнего записанного байта (по модулю размера представления - 4 байта) и EventWaitHandle для синхронизации доступа производителя / потребителя. Два канала, обращающиеся к отдельным отображенным в память файлам, дадут вам дуплексный канал.

Ссылки для .NET (C # и VB.NET) и неуправляемый C ++ .

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

0MQ - превосходный продукт в пространстве Linux, но версия для Windows несколько урезана и, помимо прочего, не поддерживает IPC.

0 голосов
/ 13 мая 2011

Существуют разные библиотеки, такие как OpenDDS, ZeroMQ и другие.Хотя ZeroMQ в Windows еще не поддерживает IPC (но поддерживает TCP).

...