Komunikacja między procesami, która opcja najlepsza

0

Cześć,
Potrzebuję rady jakiego sposoby komunikacji międzyprocesowej użyć w takim scenariuszu:

  1. Aplikacja napisana w C++ (MFC)
  2. Aplikacja napisana w C#
  3. Centralka IVR

Model połączenia wygląda tak:
1 <-> 2 <-> 3

a) 3 co jakiś czas wysyła informacje (różne komunikaty to są), które odbiera 2, a następnie przesyła je do 1.
b) 1 czasami wysyła coś do 2 (różne komunikaty), która komunikuje się z 3, ta zwraca informacje 2, które wysyłane są do 1.

Czego tu najlepiej użyć? Informacje nie są zbyt duże, ale dość często wysyłane. Aplikacje 1 i 2 są lokalnie zainstalowane, 3 obsługuje wiele stanowisk jednocześnie.
Myślałem o message'ach, ale nie wiem jak to w C# zrobić, żeby reagował na wysłanie message'a do aplikacji.

0

Moze jakis middleware typu CORBA albo ICE?

0

jeśli akceptowalne jest przekompilowanie aplikacji w C++ jako C++/CLI (jeśli nie ma wstawek asemblerowych, to powinno się dać bez problemu)
to można użyć WCF do komunikacji 1<->2.

0
Shalom napisał(a)

Moze jakis middleware typu CORBA albo ICE?

Pośrednie oprogramowanie nie wchodzi w grę.

Azarien napisał(a)

jeśli akceptowalne jest przekompilowanie aplikacji w C++ jako C++/CLI (jeśli nie ma wstawek asemblerowych, to powinno się dać bez problemu)
to można użyć WCF do komunikacji 1<->2.

Niestety, ale się nie da. Kod jest stary i wielki, samo przerzucenie go do .NET'a zajęłoby ogromną ilość czasu..

Aha, żeby jasność była. Ja potrzebuję pomysłu tylko do rozwiązania problemu komunikacji 1 <-> 2. Reszta mnie nie interesuje, bo to trochę inaczej i niezależnie ode mnie działa.

0

Ale komunikacja między 1 a 2 już istnieje, czy dopiero ją dopiszecie?
Możesz przesyłać dane po rcp, webservice, kolejkami komunikatów, przez bazę danych. Zależy co potrafisz poprawnie zaimplementować.
Jeśli 1 ma tylko wysłać dane do 2 i nie obchodzi cię odpowiedz, to kolejki komunikatów mogą być dobrym wyjściem, a w przyszłości łatwo podpiąć się to kolejkę inną technologią. MS MQ ma do tego fajną cechę że może storować dane w sql serverze, więc możesz operaować na komunikatach z całą mocą bazy danych.
Implementacja na socketach, jeśli nie umiesz tego dobrze zrobić, może przynieść więcej szkód niż problemów.
Webservice jest ok, kwestia wydajności, jednak xml, zawsze jest większy niż binarne dane. Ale daje największą elastyczność.

0

Niestety, ale się nie da. Kod jest stary i wielki, samo przerzucenie go do .NET'a zajęłoby ogromną ilość czasu..
a próbowałeś? nawet wielkie projekty da się skompilować jako C++/CLI bez zmian.
Ja tak skompilowałem całe Qt bez zmian (no dobra, z jedną, ale to i tak był błąd w samym Qt)

0
massther napisał(a)

Ale komunikacja między 1 a 2 już istnieje, czy dopiero ją dopiszecie?

Nie, nie istnieje. Należy ją stworzyć.

massther napisał(a)

Jeśli 1 ma tylko wysłać dane do 2 i nie obchodzi cię odpowiedz, to kolejki komunikatów mogą być dobrym wyjściem, a w przyszłości łatwo podpiąć się to kolejkę inną technologią. MS MQ ma do tego fajną cechę że może storować dane w sql serverze, więc możesz operaować na komunikatach z całą mocą bazy danych.

W pierwszym poście napisałem, że to jest dwukierunkowo komunikacja. Większe dane i częściej wysyłane są z 2 do 1, rzadziej (ale też często, a nie co 10sek) w drugą stronę.

massther napisał(a)

Możesz przesyłać dane po rcp, webservice, kolejkami komunikatów, przez bazę danych. Zależy co potrafisz poprawnie zaimplementować.

Dzięki za odpowiedź, ale mi właśnie chodzi o to co najlepiej użyć, żeby się nie porywać z armatą na muchę. Przypominam, że 1 i 2 są zainstalowane lokalnie i interesuje mnie tylko komunikacja między nimi, tak aby była jak najbardziej wydajna i nie zabijała mi aplikacji. Do 2 przez sieć będą szły dane z 3 (i z powrotem), ale w tym problemie to mnie nie interesuje.

Azarien napisał(a)

Niestety, ale się nie da. Kod jest stary i wielki, samo przerzucenie go do .NET'a zajęłoby ogromną ilość czasu..
a próbowałeś? nawet wielkie projekty da się skompilować jako C++/CLI bez zmian.
Ja tak skompilowałem całe Qt bez zmian (no dobra, z jedną, ale to i tak był błąd w samym Qt)

Jakbym nie próbował, to bym się nie odzywał :) Wielu przede mną również..

0

jak nie wpadniesz na nic lepszego to możesz zwykłych socketów użyć ;p

1 użytkowników online, w tym zalogowanych: 0, gości: 1