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.
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 .
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.
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ł.
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.
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
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/…
Odpowiedzi:
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:
Sekcja MSDN dotycząca WCF
źródło
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 .
źródło
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.
źródło
Usługi zdalne w .NET Framework 2.0 zapewniają kanał IPC do komunikacji między procesami w ramach tej samej maszyny.
źródło
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ł.
źródło
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.
źródło
Usługi zdalne w sieci nie są protokołem samym w sobie. Pozwala wybrać protokół do użycia: SOAP, nazwane potoki itp.
źródło
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
źródło