Jaki jest najlepszy wybór dla komunikacji między procesami .NET? [Zamknięte]

83

Czy powinienem używać nazwanych potoków lub .NET Remoting do komunikacji z działającym procesem na moim komputerze?

mrbradleyt
źródło
1
Wow, po prostu zadałem dokładnie to samo pytanie ... stackoverflow.com/questions/84860/
Kris Erickson

Odpowiedzi:

58

WCF to najlepszy wybór. Obsługuje wiele różnych mechanizmów transportowych ( w tym Named Pipes ) i może być całkowicie konfiguracja napędzanych. Gorąco polecam przyjrzenie się WCF.

Oto blog, który porównuje wydajność WCF vs Remoting .

Cytat z bloga:

Usługi WCF i .NET Remoting są naprawdę porównywalne pod względem wydajności. Różnice są tak małe (pomiar opóźnienia klienta), że nie ma znaczenia, który z nich jest nieco szybszy. Jednak usługa WCF ma znacznie lepszą przepustowość serwera niż usługa .NET Remoting. Gdybym miał rozpocząć zupełnie nowy projekt, wybrałbym WCF. W każdym razie WCF robi znacznie więcej niż usługi zdalne i dla wszystkich tych funkcji uwielbiam to.

Sekcja MSDN dotycząca WCF

Eric Schoonover
źródło
1
Dalsze dowody przemawiające za zdalnym działaniem. Od kogoś z zespołu usług zdalnych / WCF firmy Microsoft: „Inwestycja w rozwój usług zdalnych jest bardzo minimalna. WCF jest następcą usług zdalnych”. Stąd stackoverflow.com/questions/1294494/…
MarkJ
15

Jeśli jest na jednym komputerze, potoki nazwane zapewniają lepszą wydajność i można je zaimplementować za pomocą infrastruktury komunikacji zdalnej, a także programu WCF. Lub możesz po prostu bezpośrednio użyć System.IO.Pipes .

Mark Cidade
źródło
5

Jeśli masz na myśli komunikację między procesami, to do tej pory bez problemu korzystałem z .NET Remoting. Jeśli dwa procesy znajdują się na tym samym komputerze, komunikacja jest dość szybka.

Nazwane potoki są zdecydowanie bardziej wydajne, ale wymagają zaprojektowania przynajmniej podstawowego protokołu aplikacji, co może być niewykonalne. Usługi zdalne umożliwiają łatwe wywoływanie metod zdalnych.

Dario Solera
źródło
3
Funkcja WCF przez nazwane potoki również na to pozwala. Możesz po prostu użyć tego samego montażu kontraktów w obu procesach.
Kent Boogaart
3

Usługi zdalne w .NET Framework 2.0 zapewniają kanał IPC do komunikacji między procesami w ramach tej samej maszyny.

icelava
źródło
3

Jeśli używasz .NET Framework 3.0 lub nowszego, użyłbym WCF. Korzystając z WCF, możesz używać różnych powiązań w zależności od kompromisu między wydajnością / międzyoperacjami / itp. że potrzebujesz.

Jeśli wydajność nie jest krytyczna i potrzebujesz współdziałania z innymi technologiami usług sieci Web, będziesz chciał użyć powiązania WS-HTTP. W Twoim przypadku możesz użyć WCF z powiązaniem net-tcp lub powiązaniem potoku nazwanego. Albo powinno działać.

Osobiście uważam, że podejście WCF jest bardziej przejrzyste, ponieważ można wykonywać usługi oparte na kontraktach i skupiać się na komunikatach, a nie obiektach (robię tutaj uogólnienie w oparciu o domyślne modele programowania WCF / .NET Remoting). Nie lubię przesyłać obiektów przez kabel, ponieważ wiele informacji semantycznych zostaje utraconych lub nie jest jasnych. Gdy wszystko, co robisz, to wysyłanie wiadomości, tak jak w przypadku programu WCF, łatwiej jest oddzielić swoje obawy między komunikacją a klasami / infrastrukturą, z których składa się pojedynczy węzeł.

Jason Olson
źródło
2

WCF zapewnia również elastyczność. Po prostu zmieniając konfigurację (powiązanie), możesz mieć tę samą usługę na innej maszynie zamiast IPC na tej samej maszynie. Dlatego Twój kod pozostaje elastyczny.

Kod Vikram I.
źródło
Lista interfejsów API IPC dla .NET: weblogs.asp.net/ricardoperes/ ...
Ricardo Peres,
1

Usługi zdalne w sieci nie są protokołem samym w sobie. Pozwala wybrać protokół do użycia: SOAP, nazwane potoki itp.

Joel Coehoorn
źródło
0

Usługa zdalna .net jest wbudowana w .net w celu wykonywania wewnętrznej komunikacji procesu. Jeśli tego użyjesz, będą nadal wspierać i prawdopodobnie ulepszać to w przyszłych wersjach. Nazwane potoki nie dają obietnicy ulepszeń w przyszłych wersjach .net

kemiller2002
źródło
2
Mało prawdopodobne, że poprawią obsługę zdalną. Od kogoś z zespołu usług zdalnych / WCF: „W przypadku usług zdalnych inwestycja w programowanie jest bardzo niewielka. WCF jest następcą usług zdalnych”. Stąd stackoverflow.com/questions/1294494/…
MarkJ