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?
c#
wcf
asp.net-web-api
LeftyX
źródło
źródło
Odpowiedzi:
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.
źródło
HttpClient
co jest niesamowite, ale nie zajmuje się generowaniem bytu i serializacją / deserializacją.INotifyPropertyChanged
jednostki klienta? Co powiesz na walidację?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 :
źródło
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.
źródło
W wymienionych poniżej scenariuszach powinieneś wybrać WCF:
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.
źródło
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.
Uwaga: dane są nie tylko moim zdaniem, są również gromadzone z innych oficjalnych stron internetowych.
źródło
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.
źródło
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.
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.
źródło
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
źródło
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.
źródło
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ą.
źródło
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.
źródło