Komunikacja między procesami, która opcja najlepsza

Odpowiedz Nowy wątek
2011-07-25 14:22
NoobProblemIPC
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.

Pozostało 580 znaków

2011-07-25 14:36
0

Moze jakis middleware typu CORBA albo ICE?

Pozostało 580 znaków

2011-07-25 15:13
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.

Pozostało 580 znaków

2011-07-25 15:59
NoobProblemIPC
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.

Pozostało 580 znaków

2011-07-25 16:26
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ść.

Pozostało 580 znaków

2011-07-25 18:30
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)

Pozostało 580 znaków

2011-07-26 08:18
NoobProblemIPC
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ż..

Pozostało 580 znaków

2011-07-26 13:21
0

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


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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