WCF vs ASP.NET Web API [zamknięty]

484

Spędziłem kilka miesięcy próbując zrozumieć koncepcje WCF, a ostatnio opracowałem swoją pierwszą aplikację usługi WCF.

Z trudem zrozumiałem wszystkie ustawienia w pliku konfiguracyjnym.
Nie jestem przekonany co do środowiska, ale wydaje się, że możesz robić z nim niesamowite rzeczy.

Pewnego dnia dowiedziałem się, że Microsoft zaproponował nową rzecz o nazwie ASP.NET Web API .

Dla tego, co mogę przeczytać, jest to RESTful framework , bardzo łatwy w użyciu i implementacji.

Teraz próbuję dowiedzieć się, jakie są główne różnice między tymi dwoma platformami i czy powinienem spróbować przekonwertować moją starą aplikację usługi WCF za pomocą nowego interfejsu API.

Czy ktoś mógłby mi pomóc zrozumieć różnice i sposób użycia każdego z nich?

LeftyX
źródło
12
+1 ciekawe pytanie. może dostaniesz dobre odpowiedzi na programmers.stackexchange.com
Mithir
1
Jakich funkcji „starej” WCF używasz? Czy próbujesz zbudować interfejs API RESTful? Lub RPC lub SOAP?
marcind
1
@marcind: dzięki za odpowiedź. Są to głównie rozmowy ODPOWIEDNIE. W ogóle nie ma RPC.
LeftyX
4
Inną dobrą odpowiedź można znaleźć na stackoverflow.com/a/9859981/456814
1
oba są jednym i tym samym, ale starą różnicą, na którą można się natknąć, jest wcf w zasadzie dla intranetu i Webapi dla Internetu, tak, zdecydowanie możemy też uspokoić wcf! w zasadzie oba działają na protokole http web.http
LostCoder

Odpowiedzi:

185

Nowe ASP.NET Web API jest kontynuacją poprzedniego projektu WCF Web API (choć niektóre koncepcje uległy zmianie ).

WCF został pierwotnie stworzony w celu umożliwienia usług opartych na SOAP. W przypadku prostszych usług RESTful lub RPCish (zdaniem klientów takich jak jQuery) API sieci Web ASP.NET powinien być dobrym wyborem.

marcind
źródło
36
Ponadto: chociaż WCF zapewnia pewne wsparcie dla pisania usług w stylu REST, obsługa REST w ASP.NET Web API jest bardziej kompletna i wszystkie przyszłe ulepszenia funkcji REST zostaną wprowadzone w ASP.NET Web API msdn.microsoft.com/en- us / library / jj823172.aspx
Ohad Schneider
6
W rzeczywistości WCF został pierwotnie stworzony w celu zaimplementowania warstwy abstrakcji między usługą SOAP lub RPC a klientem. Chodziło o stworzenie jednej architektury (ABC) wokół obu tych bardzo różnych wywołań i obsługę instalacji hydraulicznej za pomocą plików konfiguracyjnych.
Scott Marcus
4
Prawdziwą wadą interfejsu API sieci Web platformy ASP.NET jest oprzyrządowanie klienta. Visual Studio obsługuje zintegrowane narzędzia do obsługi płynnych jednostek klienta WCF i generowania usług. Brak obsługi interfejsu API sieci Web. Wiem, że jest to, HttpClientco jest niesamowite, ale nie zajmuje się generowaniem bytu i serializacją / deserializacją.
Shimmy Weitzhandler
1
@Shimmy Co z generowaniem usług za pomocą swagger?
Alex78191
1
@ Alex78191 dzięki za odpowiedź. Czy wygenerowane jednostki mogą emitować INotifyPropertyChangedjednostki klienta? Co powiesz na walidację?
Shimmy Weitzhandler
250

Dla nas WCF jest używany dla SOAP i Web API dla REST. Chciałbym, aby interfejs API sieci Web również obsługiwał SOAP. Nie korzystamy z zaawansowanych funkcji WCF. Oto porównanie z MSDN :

wprowadź opis zdjęcia tutaj

Manish Jain
źródło
1
I Web API obsługuje OData który dla CSOM to zbawienie.
abbaf33f
12
To zadziwiające, jak stwardnienie rozsiane z tak dużą ilością mówi nic naprawdę godnego. Na przykład WCF obsługuje JSON, ale ta informacja jest dobrze ukryta w tym „porównaniu”, podczas gdy tekstowo mówi, że WebApi obsługuje JSON nie raz, ale dwa razy.
magallanes,
1
ten stół jest bez znaczenia. „JQuery” (przestraszyć wielkie litery J) jest protokołem i / lub formatem?
hyankov
1
Ciekawy. MSDN błędnie wspomina o HTTP jako protokole transportowym. HTTP to protokół warstwy aplikacji.
RayLoveless
80

Interfejs API sieci Web ASP.net dotyczy GET, POST, PUT, DELETE opartego na HTTP i REST, z dobrze znanym stylem programowania ASP.net MVC i zwrotem JSON; web API jest przeznaczony do wszystkich lekkich procesów i komponentów opartych wyłącznie na HTTP. Aby skorzystać z WCF, nawet w przypadku prostej lub najprostszej pojedynczej usługi internetowej, przyniesie ona cały dodatkowy bagaż. W przypadku lekkiej prostej usługi dla wywołań ajaxowych lub dynamicznych zawsze WebApi po prostu rozwiązuje tę potrzebę. To starannie uzupełnia lub pomaga równolegle do ASP.net MVC.

Sprawdź podcast: Hanselminutes Podcast 264 - To nie jest WCF twojego ojca - Wszystko o WebAPI z Glenn Block autorstwa Scotta Hanselmana, aby uzyskać więcej informacji.

Naveen Vijay
źródło
67

W wymienionych poniżej scenariuszach powinieneś wybrać WCF:

  1. Jeśli chcesz wysłać dane za pomocą protokołów, takich jak TCP, MSMQ lub MIME
  2. Jeśli klient korzystający po prostu wie, jak korzystać z komunikatów SOAP

WEB API to platforma do tworzenia usług RESTful / HTTP.

Jest tak wielu klientów, którzy nie rozumieją SOAP, takich jak przeglądarki HTML5, w takich przypadkach interfejsy API WEB są dobrym wyborem.

Nagłówek usług HTTP określa, jak zabezpieczyć usługę, jak buforować informacje, typ treści wiadomości, a treść HTTP może określać dowolny rodzaj treści, np. HTML, a nie tylko XML jako usługi SOAP.

Kris
źródło
7
To sprawia, że ​​założenie, że WCF obsługuje tylko komunikaty SOAP, jest błędnym założeniem. Punkty końcowe REST można również udostępniać w usługach WCF. Zmodyfikowałbym to tak, aby powiedzieć, że jeśli nie zamierzasz korzystać z funkcji WCF (patrz komunikat tridy), to Web API ma sens.
Mike
3
Tak, WCF również Odpoczywa. W zasadzie interfejs WWW to podzbiór funkcji WCF, który jest odpowiedni, jeśli wykonujesz proste aplikacje danych w stylu CRUD.
user1496062,
41

Od czasu używania obu do tej pory odkryłem wiele różnic między WCF a Web API. Oba stosy technologii są dobrze dostosowane do różnych scenariuszy, więc nie można powiedzieć, co jest lepsze, zależy to od konfiguracji i scenariusza.

Properties              ASP.Net Web API                         WCF
--------------------------------------------------------------------------------------------------
End point (mainly)      Http based                              SOAP based
Service Type            Front End                               Back-end
Support                 caching, compression, versioning        No
Framework               ASP.net                                 WCF
Orientation             Resource Oriented                       Service Oriented
Transports              http                                    http, tcp, MSMQ, Named pipe
Message pattern         Request reply                           request Reply, one way, duplex
Configuration overhead  Less                                    Much
Security                lesser than WCF (web standard security) Very high (WS-I standard)
Hosting                 IIS                                     IIS, Windows Service, Self hosting
Performance             Fast                                    A bit slower than Web API
In use from             .NET 4.0                                .NET 3.5

Uwaga: dane są nie tylko moim zdaniem, są również gromadzone z innych oficjalnych stron internetowych.

Rajput
źródło
12
Interfejs API usługi sieci Web może być również hostowany (Owin / Katana), a także w usłudze Windows
Monis Iqbal
minus 1 za budowanie tabeli przy użyciu obrazu zamiast HTML, ponieważ uniemożliwia to edycję odpowiedzi w celu poprawy.
Ahsan Ahmed
34

WCF da ci tyle gotowych produktów, że nawet nie da się tego porównać. Chyba że chcesz wykonać własną implementację (żeby wymienić tylko kilka) uwierzytelniania, autoryzacji, szyfrowania, kolejkowania, ograniczania przepustowości, niezawodnego przesyłania wiadomości, rejestrowania, sesji i tak dalej. WCF nie jest [tylko] usługami internetowymi; WCF to platforma programistyczna dla SOA.

tridy
źródło
11
Jeśli się nie mylę, myślę, że API WEB zapewnia również większość wymienionych funkcji.
Alex
4
Brak interfejsu API sieci Web nie zapewnia tych rzeczy lub zapewnia bardzo proste wersje.
user1496062,
3
Co to jest - czy to zapewnia, czy nie?
5
W celu uwierzytelnienia i autoryzacji sprawdź asp.net/web-api/overview/security/… . tl; dr: Zdecydowanie obsługuje to w IIS. Do szyfrowania prawdopodobnie będziesz musiał użyć SSL, ASP.NET naturalnie obsługuje kolejkowanie (ale jest to proste w oparciu o dostępne wątki robocze vs. przychodzące żądania). Sesje istnieją (ale nigdy nie zalecałbym używania Sesji bezpośrednio). Logowanie jest łatwe do skonfigurowania (za pomocą ActionFilters lub podobnego). Alternatywą dla niezawodnego przesyłania komunikatów jest użycie SignalR (choć nie do końca).
James Haug,
7
„Nieporównywalne z niczym”? Mało prawdopodobne.
bbsimonbb
16

Dlaczego odpowiadam:

Poświęcenie ogromnej ilości czasu na zrozumienie różnicy między tymi dwiema technologiami. Umieszczę tutaj wszystkie te punkty, które myślę: „Gdybym miał te punkty w czasie, gdy zastanawiałem się w poszukiwaniu tej odpowiedzi, to bardzo wcześniej zdecydowałem się na wybór wymaganej technologii”.

Źródło informacji:

Microsoft® Visual Studio® 2015 Unleashed

ISBN-13: 978-0-672-33736-9 ISBN-10: 0-672-33736-3

Dlaczego ASP.NET Web API i WCF:

Przed porównaniem technologii ASP.NET Web API i WCF ważne jest, aby zrozumieć, że w rzeczywistości istnieją dwa style / standardy tworzenia usług sieciowych: REST (Representational State Transfer) i SOAP / WSDL. SOAP / WSDL był oryginalnym standardem, na którym zbudowano usługi sieciowe. Był jednak trudny w użyciu i miał nieporęczne formaty wiadomości (takie jak XML), które obniżały wydajność. Usługi oparte na REST szybko stały się alternatywą. Łatwiej je pisać, ponieważ wykorzystują podstawowe konstrukcje HTTP (GET, POST, PUT, DELETE) i zwykle używają mniejszych formatów wiadomości (takich jak JSON). W rezultacie usługi HTTP oparte na REST są teraz standardem dla usług pisania ściśle ukierunkowanych na Internet.

Zdefiniujmy cel interfejsu API sieci Web ASP.NET

ASP.NET Web API to technologia firmy Microsoft służąca do opracowywania usług HTTP opartych na REST. (Dawno temu zastąpił ASMX Microsoftu, który był oparty na SOAP / WSDL.) Web API ułatwia pisanie solidnych usług opartych na protokołach HTTP zrozumiałych dla wszystkich przeglądarek i urządzeń natywnych. Umożliwia to tworzenie usług wspierających aplikację i wywoływanie ich z innych aplikacji internetowych, tabletów, telefonów komórkowych, komputerów i konsol do gier. Większość aplikacji napisanych dzisiaj w celu wykorzystania stale obecnego połączenia internetowego w pewien sposób korzysta z usług HTTP.

Zdefiniujmy teraz cel WCF:

Komunikacja przez Internet nie zawsze jest najbardziej wydajnym środkiem. Na przykład, jeśli zarówno klient, jak i usługa istnieją w tej samej technologii (lub nawet na tej samej maszynie), często mogą wynegocjować bardziej efektywne środki komunikacji (takie jak TCP / IP). Deweloperzy usług stwierdzili, że dokonują tych samych wyborów, których starali się unikać. Musieliby teraz wybierać między tworzeniem wydajnych usług wewnętrznych a możliwością uzyskania szerokiego dostępu przez Internet. A jeśli musieliby obsługiwać oba, musieliby stworzyć wiele wersji swoich usług lub przynajmniej oddzielnych serwerów proxy w celu uzyskania dostępu do swojej usługi. To jest problem rozwiązany przez Microsoft za pomocą WCF .

Dzięki WCF możesz stworzyć swoją usługę bez obawy o granice. Następnie możesz pozwolić WCF martwić się o uruchomienie usługi w najbardziej efektywny sposób, w zależności od klienta wywołującego. Aby zarządzać tym zadaniem, WCF wykorzystuje koncepcję punktów końcowych. Twoja usługa może mieć wiele punktów końcowych (skonfigurowanych w czasie projektowania lub po wdrożeniu). Każdy punkt końcowy wskazuje, w jaki sposób usługa może obsługiwać klienta wywołującego: przez Internet, zdalnie, za pomocą kolejkowania wiadomości Microsoft (MSMQ) i nie tylko. WCF umożliwia skupienie się na tworzeniu funkcjonalności usługi. Martwi się, jak najskuteczniej rozmawiać z klientami dzwoniącymi. W ten sposób pojedyncza usługa WCF może skutecznie obsługiwać wiele różnych typów klientów.

Przykład WCF:

Rozważ przykład:

Dane klientów są udostępniane między aplikacjami. Każda aplikacja może być napisana na innej platformie i może istnieć w innej lokalizacji. Możesz wyodrębnić interfejs klienta do usługi WCF, która zapewnia wspólny dostęp do udostępnionych danych klienta. Centralizuje to dane, ogranicza powielanie, eliminuje synchronizację i upraszcza zarządzanie. Ponadto za pomocą WCF można skonfigurować punkty końcowe usługi tak, aby działały w sposób odpowiedni dla klienta wywołującego. Rysunek pokazuje poprzedni przykład ze scentralizowanym dostępem do danych klientów w usłudze WCF.

W ten sposób WCF obsługuje różnych klientów

Wniosek:

i) Kiedy wybrać interfejs API sieci Web:

Nie można zaprzeczyć, że usługi HTTP oparte na REST, takie jak te utworzone przy użyciu ASP.NET Web API, stały się standardem do budowania usług sieciowych. Usługi te oferują łatwe i proste podejście dla programistów tworzących usługi internetowe. Programiści WWW rozumieją HTTP GET i POST, dzięki czemu dobrze dostosowują się do tego rodzaju usług. Dlatego jeśli piszesz usługi ściśle ukierunkowane na HTTP , logicznym wyborem jest ASP.NET Web API.

ii) Kiedy wybrać WCF:

Technologia WCF jest przydatna, gdy trzeba obsługiwać wiele punktów końcowych usług w oparciu o różne protokoły i formaty komunikatów. Produkty takie jak Microsoft BizTalk wykorzystują WCF do tworzenia niezawodnych usług, które mogą być używane również przez Internet za pomocą różnych konfiguracji maszyna-maszyna. Jeśli jednak musisz napisać aplikację, która komunikuje się przez TCP / IP po połączeniu z lokalnym sieć i działa przez HTTP, gdy jest poza siecią, WCF jest twoją odpowiedzią .

Być ostrzeżonym:

Programiści często postrzegają WCF jako trudniejsze i bardziej skomplikowane. Dlatego jeśli nie przewidzisz potrzeby usług wieloprotokołowych, prawdopodobnie trzymasz się interfejsu API sieci Web ASP.NET.

Muhammad Waqas Dilawar
źródło
1
Nie dodawaj tej samej odpowiedzi do wielu pytań . Odpowiedz na najlepszy i oznacz resztę jako duplikaty, gdy zdobędziesz wystarczającą reputację. Jeśli nie jest to duplikat, dostosuj post do pytania i oznacz go jako usunięty.
Bhargav Rao
12

Istnieje porównanie w MSDN na ten temat

WCF i ASP.NET Web API

Dla mnie wybór dotyczył Kim są klienci i gdzie się znajdują?

W firmie Klienci sieciowi i .NET: używaj WCF z wiązaniem TCP (szybka komunikacja niż HTTP)

Poza siecią firmową i korzystaj z różnorodnych technologii, takich jak PHP, Python itp .: Używaj Web API z REST

Arshad Mohammad
źródło
9

Mówiąc biznesowo, WebApi nie ma WSDL, więc programiści powinni dokumentować wszystko ręcznie. A jeśli na przykład operacja WebApi zwraca listę obiektów, wówczas klient powinien utworzyć obiekty ręcznie, tzn. WebAPI jest naprawdę podatny na błędy definicji.

Zaletą Webapi jest jego lekkość niż WCF.

magallanes
źródło
3
WCF == WS- *, webapi == REST
BozoJoe
7

Jeśli chodzi o stwierdzenie „Brak WSDL WebApi”, istnieje kilka sposobów na wygenerowanie klienta Rest. Jednym z popularnych podejść jest Swagger UI / (Swashbukkle Nuget). Daje to bogaty interfejs do zrozumienia schematu wejściowego i wyjściowego punktu końcowego REST oraz narzędzia online do testowania punktów końcowych.

JSON LD (Json Linked Documents) to kolejny nowy standard, który jeszcze bardziej ulepszy środowisko programistyczne REST oparte na JSON, ujawniając schemat JSON z lepszą semantyką.

Venkatesh Muniyandi
źródło
1

Dzięki wcf możemy skonfigurować i udostępnić tę samą obsługę usług dla wielu punktów końcowych, takich jak tcp, http.Jeśli chcesz, aby twoja usługa była oparta tylko na http, wtedy lepiej będzie korzystać z web API. Interfejs API sieci Web ma znacznie mniej konfiguracji w porównaniu do wcf i jest nieco szybszy niż wcf. Wcf obsługuje również usługi restful. Jeśli masz ograniczenia .NET Framework 3.5, wtedy masz opcję wcf.

Nayas Subramanian
źródło