Jakie są różnice między usługami internetowymi WCF i ASMX?


375

Jestem całkowicie zdezorientowany między usługami internetowymi WCF i ASMX. Na wcześniejszym etapie korzystałem z wielu usług internetowych, a teraz pojawiła się nowa rzecz zwana WCF. Nadal mogę utworzyć WCF, który działa jako usługa internetowa. Myślę, że będzie więcej rzeczy w WCF.

Jakie są różnice między WCF a usługami internetowymi? Kiedy należy użyć każdego z nich?


5
Nie ma mowy, żeby było to pytanie rekomendacyjne. Ani ASMX, ani WCF nie są produktem. Są to dwie iteracje usług internetowych w stosie Microsoft. Pytanie brzmi, jakie są różnice i czy warto poświęcić chwilę na naukę nowego? To nie to samo, co „powinienem używać elementów sterujących Telerik lub Infragistics.
John Saunders

Odpowiedzi:


391

Keith Elder ładnie porównuje ASMX do WCF tutaj. Sprawdź to.

Kolejne porównanie ASMX i WCF można znaleźć tutaj - nie zgadzam się w 100% ze wszystkimi punktami tam zawartymi, ale może ci to dać pomysł.

WCF to w zasadzie „ASMX na stereoidach” - może to być wszystko, co ASMX może zrobić - i wiele więcej! .

ASMX to:

  • łatwy i prosty do napisania i konfiguracji
  • dostępne tylko w IIS
  • tylko na żądanie z HTTP

WCF może być:

  • hostowany w IIS, usłudze Windows, aplikacji Winforms, aplikacji konsolowej - masz całkowitą swobodę
  • używany z HTTP (REST i SOAP), TCP / IP, MSMQ i wieloma innymi protokołami

W skrócie: WCF jest tutaj, aby całkowicie zastąpić ASMX.

Sprawdź Centrum deweloperów WCF w witrynie MSDN .

Aktualizacja: link wydaje się być martwy - spróbuj tego: Co to jest Windows Communication Foundation?


15
W Visual Studio 2010 .NET 4.0 WCF jest tak samo łatwe do pisania jak ASMX, nie ma już wymówki, aby pisać ASMX. WCF jest znacznie szybszy, bardziej elastyczny, bezpieczniejszy. ASMX jest dziedzictwem i nikt nie powinien nadal pisać kropki.
Tom Stickel

13
„Większość programistów błędnie zakłada, że ​​ASMX wymaga IIS; w końcu jest to jedyny przypadek, jaki kiedykolwiek widzieli. Ale prawda jest taka, że ​​ASMX nie ma żadnych technicznych zależności od IIS”. msdn.microsoft.com/en-us/magazine/cc163879.aspx
MrNick

2
@MrNick: prawo. Nie ma usług IIS, ale nadal tylko HTTP, i przejdź do porównania kodu obsługującego ASMX z kodem obsługującym usługę WCF.
John Saunders

1

2
@codemonkeyliketab: odpowiedź ma ponad 6 lat - lata świetlne w erze Internetu! Próbowałem znaleźć zamiennik Centrum programistów WCF - patrz moja aktualizacja
marc_s

37

Usługi sieciowe ASMX mogą być wywoływane tylko przez HTTP (tradycyjna usługa internetowa z .asmx). Natomiast usługę WCF lub komponent WCF można wywoływać za pomocą dowolnego protokołu (takiego jak http, tcp itp.) I dowolnego rodzaju transportu.

Po drugie, usługi sieciowe ASMX nie są elastyczne. Usługi WCF są jednak elastyczne. Jeśli tworzysz nową wersję usługi, musisz po prostu ujawnić nowy koniec. Dlatego usługi są zwinne i jest to bardzo praktyczne podejście, biorąc pod uwagę obecne trendy biznesowe.

Opracowujemy WCF jako kontrakty, interfejsy, operacje i kontrakty danych. Jako programista bardziej skupiamy się na usługach logiki biznesowej i nie musimy się martwić o stos kanałów. WCF to ujednolicony interfejs API do programowania dla wszelkiego rodzaju usług, dlatego tworzymy usługę i używamy informacji konfiguracyjnych do skonfigurowania mechanizmu komunikacji, takiego jak HTTP / TCP / MSMQ itp.


11
Może to tylko ja, ale akapity 2 i 3 wyróżniają się jako marketing BS.
Neolisk

@Net Experts powiedział: „Jeśli tworzysz nową wersję usługi, musisz po prostu ujawnić nowy koniec”. Co próbujesz powiedzieć?
Mou

@Mou, miał na myśli ujawnienie nowego endpoint. Jak<endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
AlexMelw

25

To bardzo stare pytanie, ale nie sądzę, że zalety ASMX zostały dość dobrze przedstawione. Chociaż usługi sieciowe ASMX nie są zbyt elastyczne, są bardzo proste w użyciu i zrozumieniu. Podczas gdy WCF jest bardziej elastyczny, jest również bardziej złożony, aby wstać i skonfigurować.

Usługi sieciowe ASMX są gotowe do wstania i dodania jako odwołania do usługi internetowej, gdy tylko dodasz plik. (zakładając, że Twój projekt się kompiluje)

W prostym przepływie pracy programistycznej create webservice-> run webservice-> add webservice referenceusługa sieciowa ASMX ma bardzo niewiele rzeczy, które mogą pójść źle, niewiele, które można źle skonfigurować, i to jest jej siła.

W odpowiedzi na te, które twierdzą, że WCF zastępuje ASMX, odpowiedziałbym, że WCF będzie musiał dodać usprawniony tryb konfiguracji KISS, aby całkowicie zastąpić ASMX.

Przykład web.config dla usługi sieciowej ASMX:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>

Nie sądzę, że WCF potrzebuje więcej konfiguracji do pracy, którą można wykonać za pomocą usług sieciowych asmx, a także można dodać odniesienie po stronie klienta dla usługi WCF, WCF jest znacznie potężniejszy niż asmx, może robić to, co asmx robi to i będzie tak proste jak asmx
Coder1409

9
@ Coder1409 cóż, to z pewnością większa konfiguracja, ponieważ niektóre rzeczy wymagają konfiguracji. Wiązanie, wykrywalność itp. Nie jest konieczne w asmx. Kontrakty serwisowe, kontrakty operacyjne, kontrakty danych, członkowie danych. Nie jest konieczne w asmx. Oczywiście te rzeczy powodują, że wcf jest lepszy i potężniejszy, ale zaprzeczanie, że dodaje ono złożoności, po prostu nie jest uczciwe. Dochodzi do wniosku, że nie ma wad.
Andrew Hoffman,

7
Pierwszy (drugi, trzeci ...) czas, kiedy utworzyłem wcf, zajęło mi wieki, aby ustalić wymaganą konfigurację. „Dlaczego muszę to zrobić?” ciągle zadawałem sobie pytanie. „Po co zawracać sobie głowę czymś tak złożonym?”. asmx po prostu działał natychmiast. Mówienie, że to tak proste, po prostu nie jest prawdą. Pewnego dnia w pełni zrozumiem i zmienię zdanie - do tego dnia GRRRR !!!
tomjm

1
@tomjm Ponownie, wypróbuj go w nowoczesnej wersji Visual Studio i .NET. Między innymi system konfiguracji zmienił się na domyślne więcej ustawień. W szczególności nie trzeba robić nic więcej niż podać adres URL, aby uzyskać prostą usługę internetową, tylko http, bez żadnych funkcji.
John Saunders

1
@tomjm Dobrze to wiedzieć. Szczerze mówiąc, było tak dużo konfiguracji, że sensowne było używanie aplikacji menedżera konfiguracji wcf. To może zrobić wszystko! (z wyjątkiem pracy po wyjęciu z pudełka z pewnymi dobrymi ustawieniami domyślnymi) Jednak obecnie myślimy prościej o usługach internetowych. Wcf jest nadal świetny dla zaawansowanych usług, ale .. prawdopodobnie większość rozwoju usług to webservice i trudno jest pokonać webapi2 dla imo.
Andrew Hoffman

10

WCF całkowicie zastępuje usługi sieciowe ASMX. ASMX to stary sposób świadczenia usług internetowych, a WCF to obecny sposób świadczenia usług internetowych. Tworzenie nowych usług sieciowych SOAP na kliencie lub serwerze powinno odbywać się przy użyciu WCF.


32
Problem w tym, że chociaż ASMX był modelem uproszczonym (co oznacza, że ​​nie jest zbyt elastyczny), był to model prosty (co oznacza, że ​​jest łatwy w użyciu i zrozumiały dla najczęstszych potrzeb związanych z usługami internetowymi). WCF dodaje dużo dodatkowej złożoności. Podczas gdy MS chce zastąpić ASMX WCF, wydaje się, że istnieje pewien opór, dopóki MS nie stworzy najczęstszych scenariuszy tak prostych, jak stary sposób [Webmethod].
mattmc3,

6
WCF wcale nie jest skomplikowane. Stwórz prostą usługę internetową „hello world” w obu i sprawdź, ile kodu piszesz w każdym z nich. Odpowiedź: niewiele w obu, a tylko nieco więcej w WCF. I, przy okazji, ASMX już został zastąpiony przez WCF. Skończona sprawa.
John Saunders

58
„WCF wcale nie jest skomplikowane” Ha. Powiedz mi, że na swój sposób jest przepełniony web.config.
mattmc3,

26
(Nie downvoter, ale powiem ci dlaczego) - ponieważ „to jest nowe i to jest stare” nie jest znaczącą różnicą, na którą każdy powinien się troszczyć. Nie wybieramy narzędzi wyłącznie na podstawie ich wieku - młotek jest naprawdę bardzo stary, ale wciąż jest najlepszym narzędziem do wbijania gwoździ. Więc dałeś prawidłową odpowiedź, to po prostu nie jest tak pomocne - jak stary żart „jesteś w samolocie”.
Jasmine

5
głosowanie w dół - brak odniesienia. Skąd znasz te informacje? Czy to opinia? Czy pracujesz dla Microsoft? Dodaj referencję, a ja będę głosować.
tomjm

7

Trwa wiele rozmów dotyczących prostoty usług sieciowych asmx w WCF. Pozwól mi wyjaśnić kilka punktów tutaj.

  • To prawda, że ​​początkujący programiści serwisów internetowych z łatwością zaczną korzystać z usług sieciowych asmx. Visual Studio wykonuje za nich całą pracę i z łatwością tworzy projekt Hello World.
  • Ale jeśli nauczysz się WCF (co oczywiście nie zajmie dużo czasu), możesz przekonać się, że WCF jest również dość prosty i możesz iść dalej.
  • Ważne jest, aby pamiętać, że wspomniane złożoności WCF są faktycznie przypisywane pięknym cechom, które ze sobą niesie. Adresy, powiązania, umowy i punkty końcowe, usługi i klienci są wymienione w pliku konfiguracyjnym. Piękno polega na tym, że logika biznesowa jest segregowana i bezpiecznie utrzymywana. Jutro, jeśli trzeba zmienić wiązanie z basicHttpBinding do netTcpBinding można łatwo utworzyć w pliku config wiązania i używać go. Tak więc wszystkie zmiany związane z klientami, kanałami komunikacji, powiązaniami itp. Należy wprowadzić w konfiguracji, pozostawiając logikę biznesową bezpieczną i nienaruszoną, co ma sens.
  • „Usługi sieciowe” WCF są częścią znacznie szerszego spektrum zdalnej komunikacji włączanej przez WCF. Otrzymasz znacznie wyższy stopień elastyczności i przenośności, robiąc rzeczy w WCF niż przez tradycyjny ASMX, ponieważ WCF jest zaprojektowany od podstaw, aby podsumować wszystkie różne infrastruktury programowania rozproszonego oferowane przez Microsoft. Punkt końcowy w WCF może być komunikowany z SOAP / XML tak samo łatwo, jak TCP / binarny, a zmiana tego medium jest po prostu modyfikacją pliku konfiguracyjnego. Teoretycznie zmniejsza to ilość nowego kodu potrzebnego przy przenoszeniu lub zmianie potrzeb biznesowych, celów itp.
  • Dostęp do usług internetowych można uzyskać tylko przez HTTP i działa w środowisku bezstanowym, w którym WCF jest elastyczny, ponieważ jego usługi mogą być hostowane w różnych typach aplikacji. Możesz hostować swoje usługi WCF w konsoli, usługach Windows, IIS i WAS, które są różnymi sposobami tworzenia nowych projektów w Visual Studio.
  • ASMX jest starszy od WCF i wszystko, co ASMX może to zrobić, może WCF (i więcej). Zasadniczo widać, że WCF próbuje logicznie pogrupować wszystkie różne sposoby komunikacji dwóch aplikacji w świecie Microsoft; ASMX był tylko jednym z wielu sposobów, dlatego jest teraz zgrupowany pod parasolem możliwości WCF.
  • Zawsze będziesz chciał używać programu Visual Studio dla NET 4.0 lub 4.5, ponieważ ułatwia to tworzenie usług WCF.
  • Główną różnicą jest to, że usługi sieciowe używają XmlSerializer. Ale WCF używa DataContractSerializer, który ma lepszą wydajność w porównaniu do XmlSerializer. Właśnie dlatego WCF działa znacznie lepiej niż inne odpowiedniki technologii komunikacyjnej z .NET, takie jak asmx, .NET zdalne itp.

Nie zapominając, że byłem jednym z tych facetów, którzy lubili usługi asmx bardziej niż WCF, ale wtedy nie byłem świadomy usług WCF i ich możliwości. Bałam się konfiguracji WCF. Ale odważyłem się i spróbowałem napisać kilka własnych usług WCF, a kiedy dowiedziałem się więcej o WCF, teraz nie mam żadnych zahamowań na temat WCF i polecam je każdemu i wszystkim. Miłego kodowania !!!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.