Was sind die Unterschiede zwischen WCF- und ASMX-Webdiensten?

375

Ich bin total verwirrt zwischen WCF- und ASMX-Webdiensten. Ich habe in meiner früheren Phase viele Webdienste verwendet, und jetzt gibt es diese neue Einführung namens WCF. Ich kann immer noch WCF erstellen, das als Webdienst fungiert. Ich denke, es wird mehr Zeug in WCF geben.

Was sind die Unterschiede zwischen WCF und Webdiensten? Wann sollte jeder verwendet werden?

Shailesh
quelle
5
Dies ist auf keinen Fall eine Empfehlungsfrage. Weder ASMX noch WCF sind Produkte. Dies sind zwei Iterationen von Webdiensten im Microsoft-Stack. Die Frage ist, was sind die Unterschiede, und lohnt es sich, den neuen zu lernen? Dies ist nicht dasselbe wie "sollte ich Telerik-Steuerelemente oder Infragistik verwenden.
John Saunders

Antworten:

391

Keith Elder vergleicht hier ASMX gut mit WCF . Hör zu.

Ein weiterer Vergleich von ASMX und WCF finden Sie hier - ich stimme nicht zu 100% allen Punkten dort zu, aber es könnte Ihnen eine Idee geben.

WCF ist im Grunde "ASMX auf Stereoiden" - es kann alles sein, was ASMX könnte - und vieles mehr! .

ASMX ist:

  • einfach und leicht zu schreiben und zu konfigurieren
  • nur in IIS verfügbar
  • Nur über HTTP aufrufbar

WCF kann sein:

  • gehostet in IIS, einem Windows-Dienst, einer Winforms-Anwendung, einer Konsolen-App - Sie haben völlige Freiheit
  • Wird mit HTTP (REST und SOAP), TCP / IP, MSMQ und vielen weiteren Protokollen verwendet

Kurz gesagt: WCF ist hier, um ASMX vollständig zu ersetzen.

Überprüfen Sie das WCF Developer Center auf MSDN .

Update: Link scheint tot zu sein - versuchen Sie Folgendes: Was ist Windows Communication Foundation?

marc_s
quelle
15
Mit Visual Studio 2010 .net 4.0 ist WCF genauso einfach zu schreiben wie ASMX. Es gibt keine Entschuldigung mehr, ASMX zu schreiben. WCF ist viel schneller, flexibler und sicherer. ASMX ist ein Vermächtnis und niemand sollte es noch schreiben.
Tom Stickel
13
"Die meisten Entwickler gehen fälschlicherweise davon aus, dass ASMX IIS erfordert. Schließlich ist dies der einzige Anwendungsfall, den sie jemals gesehen haben. Die Wahrheit ist jedoch, dass ASMX keinerlei technische Abhängigkeiten von IIS aufweist." msdn.microsoft.com/en-us/magazine/cc163879.aspx
MrNick
2
@ MrNick: richtig. Kein IIS, aber immer noch nur HTTP. Vergleichen Sie den Code zum Hosten von ASMX mit dem Code zum Hosten eines WCF-Dienstes.
John Saunders
1
Leider ist der Link keithelder.net/2008/10/17/wcf-vs-asmx-webservices defekt.
Robert
2
@codemonkeyliketab: Die Antwort ist mehr als 6 Jahre alt - Lichtjahre im Internetzeitalter! Ich habe versucht, einen Ersatz für das WCF Developer Center zu finden - siehe mein Update
marc_s
37

ASMX-Webdienste können nur über HTTP (traditioneller Webservice mit .asmx) aufgerufen werden. Während der WCF-Dienst oder eine WCF-Komponente von jedem Protokoll (wie http, tcp usw.) und jedem Transporttyp aufgerufen werden kann.

Zweitens sind ASMX-Webdienste nicht flexibel. WCF-Dienste sind jedoch flexibel. Wenn Sie eine neue Version des Dienstes erstellen, müssen Sie nur ein neues Ende verfügbar machen. Daher sind Dienstleistungen agil und ein sehr praktischer Ansatz, um die aktuellen Geschäftstrends zu betrachten.

Wir entwickeln WCF als Verträge, Schnittstellen-, Betriebs- und Datenverträge. Als Entwickler konzentrieren wir uns mehr auf die Geschäftslogikdienste und müssen uns keine Gedanken über den Kanalstapel machen. WCF ist eine einheitliche Programmier-API für alle Arten von Diensten. Daher erstellen wir den Dienst und verwenden Konfigurationsinformationen, um den Kommunikationsmechanismus wie HTTP / TCP / MSMQ usw. Einrichten zu können

NET-Experten
quelle
11
Vielleicht bin ich es nur, aber die Absätze 2 und 3 fallen als Marketing-BS auf.
Neolisk
@ Net Experts u sagte "Wenn Sie eine neue Version des Dienstes erstellen, müssen Sie nur ein neues Ende offenlegen", was versuchen Sie zu sagen?
Mou
@Mou, er meinte, ein neues aufzudecken, endpointdenke ich. Gefällt <endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
mir
25

Dies ist eine sehr alte Frage, aber ich glaube nicht, dass die Vorteile von ASMX angemessen dargestellt wurden. ASMX-Webdienste sind zwar nicht besonders flexibel, aber sehr einfach zu verwenden und zu verstehen. Während WCF flexibler ist, ist es auch komplexer aufzustehen und zu konfigurieren.

ASMX-Webdienste können sofort aufgerufen und als Webservice-Referenz hinzugefügt werden, sobald Sie die Datei hinzufügen. (vorausgesetzt, Ihr Projekt erstellt)

Für den einfachen Entwicklungsworkflow von create webservice-> run webservice-> add webservice referencehat ein ASMX-Webservice sehr wenig, was schief gehen kann, nicht viel, was Sie falsch konfigurieren können, und das ist seine Stärke.

Als Antwort auf diejenigen, die behaupten, dass WCF ASMX ersetzt, würde ich antworten, dass WCF einen optimierten KISS-Konfigurationsmodus hinzufügen müsste, um ASMX vollständig zu ersetzen.

Beispiel web.config für einen ASMX-Webservice:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>
Andrew Hoffman
quelle
Ich denke nicht, dass WCF mehr Konfiguration für die Arbeit benötigt, die mit asmx-Webservices ausgeführt werden kann, und Sie können auch auf Ihrer Clientseite eine Referenz für den WCF-Dienst hinzufügen. WCF ist weitaus leistungsfähiger als asmx. Es kann asmx ausführen tut und es wird so einfach wie asmx sein
Coder1409
9
@ Coder1409 Nun, es ist sicherlich mehr Konfiguration, da einige Dinge konfiguriert werden müssen. Bindung, Auffindbarkeit usw. In asmx nicht erforderlich. Serviceverträge, Betriebsverträge, Datenverträge, Datenmitglieder. In asmx nicht erforderlich. Natürlich sind diese Dinge der Grund, warum wcf überlegen und leistungsfähiger ist, aber zu leugnen, dass es Komplexität hinzufügt, ist einfach nicht ehrlich. Es reicht zu sagen, dass es keine Nachteile gibt.
Andrew Hoffman
7
Beim ersten (zweiten, dritten ...) Mal, als ich ein Wcf erstellt habe, habe ich ewig gebraucht, um die erforderliche Konfiguration herauszufinden. "Warum muss ich das tun?" Ich fragte mich immer wieder. "Warum sich mit etwas so Komplexem beschäftigen?" asmx hat sofort funktioniert. Zu sagen, dass es genauso einfach ist, ist einfach nicht wahr. Eines Tages werde ich meine Sichtweise vollständig verstehen und ändern - bis zu diesem Tag GRRRR !!!
Tomjm
1
@tomjm Versuchen Sie es erneut mit einer modernen Version von Visual Studio und .NET. Unter anderem hat das Konfigurationssystem die Standardeinstellungen für weitere Einstellungen geändert. Insbesondere müssen Sie kaum mehr tun, als die URL anzugeben, um einen einfachen Webdienst (nur http) ohne Funktionen zu erhalten.
John Saunders
1
@ Tomjm Nun, das ist gut zu wissen. Ehrlich gesagt war es früher so viel Konfiguration, dass es Sinn machte, eine wcf config manager App zu verwenden. Es könnte alles machen! (außer sofort einsatzbereit mit einigen guten Standardeinstellungen) Heutzutage denken wir jedoch einfacher über WEB-Dienste nach. Wcf ist immer noch großartig für fortgeschrittene Dienste, aber wahrscheinlich ist der Großteil der Dienstentwicklung die Webservice-Entwicklung, und es ist schwer, webapi2 für die Webservice-Entwicklung imo zu schlagen.
Andrew Hoffman
10

WCF ersetzt ASMX-Webdienste vollständig. ASMX ist die alte Methode zur Ausführung von Webdiensten, und WCF ist die derzeitige Methode zur Ausführung von Webdiensten. Alle neuen SOAP-Webdienstentwicklungen auf dem Client oder Server sollten mit WCF durchgeführt werden.

John Saunders
quelle
32
Das Problem ist, dass ASMX zwar ein vereinfachtes Modell war (was bedeutet, dass es nicht besonders flexibel ist), es jedoch ein einfaches Modell war (was bedeutet, dass es für die häufigsten Webdienstanforderungen einfach zu verwenden und zu verstehen ist). WCF erhöht die Komplexität erheblich. Während MS ASMX durch WCF ersetzen möchte, scheint es einen gewissen Widerstand zu geben, bis MS die gängigsten Szenarien so einfach wie die alte [Webmethode] macht.
Mattmc3
6
WCF ist überhaupt nicht komplex. Erstellen Sie in beiden Fällen einen einfachen "Hallo Welt" -Webservice und sehen Sie, wie viel Code Sie jeweils schreiben. Die Antwort: auch nicht viel und nur etwas mehr in WCF. Und BTW, ASMX bereits wurde durch WCF ersetzt. Beschlossene Sache.
John Saunders
58
"WCF ist überhaupt nicht komplex" Ha. Sagen Sie das auf meine Weise überblähte web.config.
Mattmc3
26
(Kein Downvoter, aber ich sage Ihnen warum) - weil "das ist neu und das ist alt" kein wesentlicher Unterschied ist, den sich irgendjemand interessieren sollte. Wir wählen Werkzeuge nicht nur danach, wie alt sie sind - der Hammer ist wirklich sehr, sehr alt, aber er ist die meiste Zeit immer noch das beste Werkzeug zum Einschlagen von Nägeln. Sie haben also eine gültige Antwort gegeben, es ist einfach nicht so hilfreich - wie der alte Witz "Sie sind in einem Flugzeug".
Jasmine
5
nach unten gestimmt - keine Referenz. Woher kennen Sie diese Informationen? Ist es Meinung? Arbeiten Sie für Microsoft? Fügen Sie eine Referenz hinzu und ich werde abstimmen.
Tomjm
7

Es wird viel über die Einfachheit von asmx-Webdiensten über WCF gesprochen. Lassen Sie mich hier einige Punkte klarstellen.

  • Es ist wahr, dass unerfahrene Webdienstentwickler problemlos mit asmx-Webdiensten beginnen können. Visual Studio erledigt die gesamte Arbeit für sie und erstellt problemlos ein Hello World-Projekt.
  • Wenn Sie jedoch WCF lernen können (was natürlich nicht viel Zeit in Anspruch nimmt), können Sie feststellen, dass WCF auch recht einfach ist und Sie problemlos fortfahren können.
  • Es ist wichtig, sich daran zu erinnern, dass diese genannten Komplexitäten in WCF tatsächlich auf die schönen Eigenschaften zurückzuführen sind, die es mit sich bringt. In der Konfigurationsdatei sind Adressen, Bindungen, Verträge und Endpunkte, Dienste und Clients aufgeführt. Das Schöne ist, dass Ihre Geschäftslogik getrennt und sicher gepflegt wird. Wenn Sie morgen die Bindung von basicHttpBinding in netTcpBinding ändern müssen , können Sie einfach eine Bindung in der Konfigurationsdatei erstellen und verwenden. Alle Änderungen in Bezug auf Clients, Kommunikationskanäle, Bindungen usw. müssen in der Konfiguration vorgenommen werden, wobei die Geschäftslogik sicher und intakt bleibt, was sehr sinnvoll ist.
  • WCF- "Webdienste" sind Teil eines viel breiteren Spektrums der Fernkommunikation, die über WCF ermöglicht wird. Sie erhalten ein viel höheres Maß an Flexibilität und Portabilität bei der Ausführung von Aufgaben in WCF als bei herkömmlichem ASMX, da WCF von Grund auf so konzipiert ist, dass alle von Microsoft angebotenen verteilten Programmierinfrastrukturen zusammengefasst werden. Ein Endpunkt in WCF kann über SOAP / XML genauso einfach kommuniziert werden wie über TCP / Binär. Das Ändern dieses Mediums ist einfach ein Mod für die Konfigurationsdatei. Theoretisch reduziert dies die Menge an neuem Code, die beim Portieren oder Ändern von Geschäftsanforderungen, Zielen usw. benötigt wird.
  • Auf Webdienste kann nur über HTTP zugegriffen werden, und es funktioniert in einer zustandslosen Umgebung, in der WCF flexibel ist, da seine Dienste in verschiedenen Arten von Anwendungen gehostet werden können. Sie können Ihre WCF-Dienste in Console, Windows Services, IIS und WAS hosten. Dies sind wiederum verschiedene Möglichkeiten, neue Projekte in Visual Studio zu erstellen.
  • ASMX ist älter als WCF, und alles, was ASMX kann, kann WCF (und mehr). Grundsätzlich kann WCF als Versuch angesehen werden, die verschiedenen Möglichkeiten, zwei Apps in der Welt von Microsoft zur Kommunikation zu bringen, logisch zusammenzufassen. ASMX war nur eine dieser vielen Möglichkeiten und wird daher jetzt unter dem Dach der WCF zusammengefasst.
  • Sie werden Visual Studio für NET 4.0 oder 4.5 immer gerne verwenden, da dies das Leben beim Erstellen von WCF-Diensten erleichtert.
  • Der Hauptunterschied besteht darin, dass Webdienste XmlSerializer verwenden. WCF verwendet jedoch DataContractSerializer, dessen Leistung im Vergleich zu XmlSerializer besser ist. Aus diesem Grund bietet WCF eine weitaus bessere Leistung als andere Gegenstücke der Kommunikationstechnologie von .NET wie asmx, .NET-Remoting usw.

Nicht zu vergessen, dass ich einer der Typen war, die asmx-Dienste mehr mochten als WCF, aber dieses Mal war ich mir der WCF-Dienste und ihrer Fähigkeiten nicht bewusst. Ich hatte Angst vor den WCF-Konfigurationen. Aber ich habe es gewagt und versucht, einige eigene WCF-Dienste zu schreiben, und als ich mehr über WCF erfuhr, habe ich jetzt keine Hemmungen mehr für WCF und empfehle sie jedem und jedem. Viel Spaß beim Codieren !!!

Sagnik Majumder
quelle