2012-05-15 13 views
7

Pracuję nad aplikacją C#, która zawiera wiele usług Windows, które będą musiały się ze sobą komunikować, aby przekazywać dane dookoła. Usługi te mogą znajdować się na tym samym komputerze, ale mogą być odległe. W tym celu przyjrzałem się użyciu WCF, ale wygląda na to, że WCF jest zbyt ciężki i ma dużo dodatkowej konfiguracji, która wydaje mi się niepotrzebna (wymaga tego .NET 3.5, wiem, że .NET 4 to uprościł)Wymiana WCF dla komunikacji między procesami/maszyny

Więc moje pytanie brzmi, jaki byłby najlepszy zamiennik WCF, oprócz przestarzałego .NET Remoting, które zapewniają tę funkcjonalność?

+0

Narzekanie konfiguracji wydaje się drobny Tad. Jeśli chodzi o wydajność, powiązanie NetTCP jest dostępne w wersji 3.5, więc nie masz pewności, na czym ona polega. –

+0

Byłem bardziej ciekawy, czy istnieją alternatywy i jakie mogą one być. Wyszukiwanie w Google zawsze wskazuje mi powrót do WCF. To pochodzi od kogoś, kto zazwyczaj programuje Javę, więc jestem przyzwyczajony do RMI, EJB, itd. –

+4

Osiągnąłem mniej więcej ten sam wniosek. Stwierdziłem, że konfiguracja WCF jest trudna i źle udokumentowana, a pod Byłem też strasznie powolny i nieco niechętny do wydania pamięci. Może ustawiłem go źle, ale nie było tak wydajne, jak się spodziewałem, a poprawka nie była widoczna w niezliczonej liczbie opcji konfiguracyjnych. pisząc własne * lekkie frameworki *, które mam nadzieję, że pewnego dnia otrzymam zgodę na otwarcie - źródła. Nie było to łatwe do wdrożenia. Dopóki nie wdasz się w tego typu problemy, trzymałbym się WCF, dopóki * nie okaże się to problematyczne. – spender

Odpowiedz

14

Używam PInvoke do uzyskiwania dostępu do środowiska wykonawczego Windows RPC przez prawie 8 lat. Jest szybki i niezawodny, jeśli chodzi o transport. W połączeniu z szybkim serializatorem, takim jak protobuf-csharp-port, wynikowa komunikacja jest solidna i ma postać very fast.

Więc budować to od ziemi-up to wymaga trzech części:

  1. buforów protokołów Google (protobuf-csharp-port) dla serializacji.
  2. Mój własny CSharpTest.Net.RpcLibrary dla transportu.
  3. Trochę kodu kleju, aby połączyć je z protobuf-csharp-rpc.

Są dostępne na Nuget w następujących pakietach: Google.ProtocolBuffers, CSharpTest.Net.RpcLibrary i Google.ProtocolBuffers.Rpc.

Poniżej znajduje się szybkie zaniedbany na podręczny:

  1. zdefiniować zestaw komunikatów i usługi przy użyciu Google Protocol Buffer Language.

  2. Gdy już to zdefiniujesz, uruchomisz ProtoGen.exe, aby wygenerować kody pośredniczące i wiadomości w języku C#. Pamiętaj, aby dodać "-service_generator_type = IRPCDISPATCH", aby wygenerować poprawny kod usługi.

  3. Teraz, gdy masz wygenerowane pliki źródłowe, dodaj je do projektu i podaj trzy zestawy z powyższych pakietów.

  4. Na koniec spójrz na przykładowy kod klienta/serwera na stronie projektu protobuf-csharp-rpc. Zastąp "SearchService" swoją nazwą usługi i powinieneś być gotowy do uruchomienia.

  5. Opcjonalnie zmień konfigurację klienta/serwera RPC. Przykład pokazuje użycie LRPC, który jest tylko lokalnym hostem; jednak plik źródłowy DemoRpcLibrary.cs również pokazuje TCP/IP i Named Pipes.

Zawsze możesz wysłać mi wiadomość e-mail (roger @ my user name) w celu uzyskania dalszych informacji lub przykładów.

Aktualizacja

napisałem krótki przewodnik startowy: WCF replacement for cross process/machine communication.

+0

To wygląda na alternatywę, której szukałem, dzięki za informację! –

+1

@Andrew Landsverk, zobacz także: http://csharptest.net/1177/wcf-replacement-for-cross-processmachine-communication/ –

+0

Wow, dzięki za poświęcenie czasu na przygotowanie tego! –

2

Możesz zajrzeć do ZeroMQ, jest bardzo lekki i skuteczny i ma dobre wiązania C#. (Pisząc to na moim telefonie komórkowym, więc na razie będziesz musiał sam to zrobić).

+0

Nie nazwałbym lekkością ZeroMQ. –

+0

ZeroMQ jest bardzo dobry, pod warunkiem, że nie odpowiadasz na pytanie i nie martwisz się, że wiadomości zostaną upuszczone na podłogę. Podobnie jak wszystkie kolejki, można przechowywać tylko tyle zaległości. Wydajność ZeroMQ w gwarantowanej konfiguracji dostawy i odpowiedzi/żądania jest szczególnie zła. –

Powiązane problemy