WCF vs ASP.NET Web API [geschlossen]

484

Ich habe einige Monate damit verbracht, die Konzepte hinter WCF zu verstehen, und kürzlich habe ich meine erste WCF-Dienstanwendung entwickelt.

Ich habe mich ziemlich bemüht, alle Einstellungen in der Konfigurationsdatei zu verstehen.
Ich bin nicht von der Umwelt überzeugt, aber es scheint, dass man damit erstaunliche Dinge machen kann.

Neulich habe ich herausgefunden, dass Microsoft eine neue Version namens ASP.NET Web API herausgebracht hat .

Für das, was ich lesen kann, ist es ein RESTful-Framework , das sehr einfach zu verwenden und zu implementieren ist.

Jetzt versuche ich herauszufinden, was die Hauptunterschiede zwischen den beiden Frameworks sind und ob ich versuchen sollte, meine alte WCF-Dienstanwendung mit der neuen API zu konvertieren .

Könnte mir bitte jemand helfen, die Unterschiede und die Verwendung der einzelnen zu verstehen?

LeftyX
quelle
12
+1 interessante Frage. Vielleicht erhalten Sie gute Antworten auf programmers.stackexchange.com
Mithir
1
Welche Funktionen der "alten" WCF verwenden Sie? Versuchen Sie, eine RESTful-API zu erstellen? Oder RPC oder SOAP?
Marcind
1
@ Marcind: Danke für deine Antwort. Es sind meistens RESTful Anrufe. Überhaupt kein RPC.
LeftyX
4
Eine weitere gute Antwort finden Sie unter stackoverflow.com/a/9859981/456814
1
beide sind ein und dasselbe, aber der alte Unterschied, auf den man stoßen könnte, wäre, dass das wcf im Grunde genommen für Intranet und Webapi für das Internet ist. Ja, definitiv können wir wcf auch erholsam machen! Grundsätzlich haben beide auf dem http-Protokoll web.http
LostCoder

Antworten:

185

Die neue ASP.NET-Web-API ist eine Fortsetzung des vorherigen WCF-Web-API- Projekts (obwohl sich einige Konzepte geändert haben ).

WCF wurde ursprünglich erstellt, um SOAP-basierte Dienste zu aktivieren. Für einfachere RESTful- oder RPCish-Dienste (denken Sie an Clients wie jQuery) sollte die ASP.NET-Web-API eine gute Wahl sein.

Marcind
quelle
36
Außerdem: Obwohl WCF einige Unterstützung für das Schreiben von Diensten im REST-Stil bietet, ist die Unterstützung für REST in der ASP.NET-Web-API vollständiger und alle zukünftigen Verbesserungen der REST-Funktionen werden in der ASP.NET-Web-API msdn.microsoft.com/en- vorgenommen. us / library / jj823172.aspx
Ohad Schneider
6
Eigentlich wurde WCF ursprünglich erstellt, um eine Abstraktionsschicht zwischen einem SOAP- oder RPC-Dienst und dem Client zu implementieren. Es ging darum, eine einzige Architektur (ABC) um diese beiden sehr unterschiedlichen Aufrufe herum zu erstellen und die Installation über Konfigurationsdateien abzuwickeln.
Scott Marcus
4
Ein wirklicher Nachteil der ASP.NET-Web-API ist das Client-Tooling. Visual Studio unterstützt integrierte Tools zur Unterstützung nahtloser WCF-Service-Client-Entitäten und der Service-Generierung. Keine Unterstützung in der Web-API. Ich weiß, dass es das gibt, HttpClientwas großartig ist, aber es kümmert sich nicht um die Erzeugung von Entitäten und die Serialisierung / Deserialisierung.
Shimmy Weitzhandler
1
@Shimmy Was ist mit der Service-Generierung mit Swagger?
Alex78191
1
@ Alex78191 danke für deine Antwort. Können die generierten Entitäten INotifyPropertyChangedClient-Entitäten ausgeben ? Wie wäre es mit einer Validierung?
Shimmy Weitzhandler
250

Für uns wird WCF für SOAP und Web API für REST verwendet. Ich wünschte, die Web-API würde auch SOAP unterstützen. Wir verwenden keine erweiterten Funktionen von WCF. Hier ist ein Vergleich von MSDN :

Geben Sie hier die Bildbeschreibung ein

Manish Jain
quelle
1
Und die Web-API unterstützt OData, was für CSOM ein Geschenk Gottes ist.
Abbaf33f
12
Es ist erstaunlich, wie MS mit so viel nichts wirklich Wertvolles sagt. Beispielsweise unterstützt WCF JSON, aber diese Informationen sind in diesem "Vergleich" gut versteckt, während in Textform angegeben wird, dass WebApi JSON nicht nur einmal, sondern zweimal unterstützt.
Magallanes
1
Diese Tabelle ist bedeutungslos. "JQuery" (Angst Anführungszeichen für die Hauptstadt J) ist ein Protokoll und / oder Format?
Hyankov
1
Interessant. MSDN erwähnt HTTP fälschlicherweise als Transportprotokoll. HTTP ist ein Protokoll der Anwendungsschicht.
RayLoveless
80

Bei der ASP.net-Web-API dreht sich alles um HTTP- und REST-basiertes GET, POST, PUT, DELETE mit bekanntem ASP.net MVC-Programmierstil und JSON-Rückgabe. Die Web-API ist für alle leichten Prozess- und reinen HTTP-basierten Komponenten vorgesehen. Damit WCF auch für einen einfachen oder einfachsten einzelnen Webdienst eingesetzt werden kann, wird das gesamte zusätzliche Gepäck mitgebracht. Für einen leichten, einfachen Service für Ajax- oder dynamische Anrufe löst WebApi immer nur die Anforderungen. Dies ergänzt oder hilft parallel zur ASP.net MVC.

Schauen Sie sich den Podcast an: Hanselminutes Podcast 264 - Dies ist nicht die WCF Ihres Vaters - Alles über die WebAPI mit Glenn Block von Scott Hanselman für weitere Informationen.

Naveen Vijay
quelle
67

In den unten aufgeführten Szenarien sollten Sie sich für WCF entscheiden:

  1. Wenn Sie Daten über Protokolle wie TCP, MSMQ oder MIME senden müssen
  2. Wenn der konsumierende Client nur weiß, wie SOAP-Nachrichten konsumiert werden

Die WEB-API ist ein Framework für die Entwicklung von RESTful / HTTP-Diensten.

Es gibt so viele Clients, die SOAP nicht verstehen, wie Browser, HTML5. In diesen Fällen sind WEB-APIs eine gute Wahl.

Der Header der HTTP-Dienste gibt an, wie der Dienst gesichert werden soll, wie die Informationen zwischengespeichert werden sollen, der Typ des Nachrichtentexts und der HTTP-Text können alle Arten von Inhalten wie HTML angeben, nicht nur XML als SOAP-Dienste.

Kris
quelle
7
Dies macht die Annahme, dass WCF nur SOAP-Nachrichten verarbeitet, zu einer falschen Annahme. Sie können REST-Endpunkte auch für WCF-Services verfügbar machen. Ich würde es so ändern, dass wenn Sie die Funktionen von WCF nicht verwenden (siehe Tridys Nachricht), dann ist die Web-API sinnvoll.
Mike
3
Ja, WCF macht auch Ruhe. Grundsätzlich ist Web-API eine Teilmenge der WCF-Funktionalität, die geeignet ist, wenn Sie einfache Daten-Apps im CRUD-Stil ausführen.
user1496062
41

Seit ich beide bisher verwendet habe, habe ich viele Unterschiede zwischen WCF und Web-API festgestellt. Beide Technologie-Stacks eignen sich gut für unterschiedliche Szenarien, daher kann nicht gesagt werden, welche besser ist. Dies hängt von der Konfiguration und dem Szenario ab.

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

Hinweis: Die Daten sind nicht nur meine Ansicht, sondern werden auch von anderen offiziellen Websites gesammelt.

Rajput
quelle
12
Die Webdienst-API kann auch selbst gehostet werden (Owin / Katana) sowie in einem Windows-Dienst
Monis Iqbal
minus 1 für die Erstellung der Tabelle mit einem Bild anstelle von HTML, da dies die Bearbeitung der Antwort zur Verbesserung verhindert.
Ahsan Ahmed
34

WCF bietet Ihnen so viel von der Stange, dass es mit nichts vergleichbar ist. Es sei denn, Sie möchten Authentifizierung, Autorisierung, Verschlüsselung, Warteschlange, Drosselung, zuverlässiges Messaging, Protokollierung, Sitzungen usw. selbst implementieren (um nur einige zu nennen). WCF ist nicht [nur] ein Webdienst; WCF ist eine Entwicklungsplattform für SOA.

tridy
quelle
11
Wenn ich mich nicht irre, denke ich, dass die WEB-API auch die meisten der von Ihnen aufgelisteten Funktionen bietet.
Alex
4
Keine Web-API bietet diese Dinge nicht oder sehr einfache Versionen.
user1496062
3
Nun, was ist es - bietet es ihnen oder nicht?
5
Informationen zur Authentifizierung und Autorisierung finden Sie unter asp.net/web-api/overview/security/… . tl; dr: Es unterstützt es definitiv in IIS. Für die Verschlüsselung müssen Sie wahrscheinlich SSL verwenden. ASP.NET übernimmt natürlich die Warteschlange (dies hängt jedoch direkt von den verfügbaren Arbeitsthreads im Vergleich zu eingehenden Anforderungen ab). Es gibt Sitzungen (aber ich würde niemals empfehlen, Sitzungen direkt zu verwenden). Die Protokollierung ist einfach genug einzurichten (über ActionFilters oder ähnliches). Eine Alternative zu zuverlässigem Messaging ist die Verwendung von SignalR (wenn auch nicht genau).
James Haug
7
"Nicht vergleichbar mit irgendetwas" ?? Unwahrscheinlich.
Bbsimonbb
16

Warum ich antworte:

Ich habe sehr viel Zeit gebraucht, um den Unterschied zwischen diesen beiden Technologien zu verstehen. Ich werde all diese Punkte hier einfügen, die ich denke: "Wenn ich diese Punkte zu der Zeit hatte, als ich mich auf der Suche nach dieser Antwort wunderte, habe ich mich sehr früher für die Auswahl meiner erforderlichen Technologie entschieden."

Informationsquelle:

Microsoft® Visual Studio® 2015 entfesselt

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

Warum ASP.NET Web API und WCF:

Vor dem Vergleich der Technologien von ASP.NET Web API und WCF ist es wichtig zu verstehen, dass es tatsächlich zwei Stile / Standards zum Erstellen von Webdiensten gibt: REST (Representational State Transfer) und SOAP / WSDL. Die SOAP / WSDL war der ursprüngliche Standard, auf dem Webdienste aufgebaut waren. Es war jedoch schwierig zu verwenden und hatte umfangreiche Nachrichtenformate (wie XML), die die Leistung beeinträchtigten. REST-basierte Services wurden schnell zur Alternative. Sie sind einfacher zu schreiben, da sie die Grundkonstrukte von HTTP (GET, POST, PUT, DELETE) nutzen und normalerweise kleinere Nachrichtenformate (wie JSON) verwenden. Daher sind REST-basierte HTTP-Dienste jetzt der Standard für Schreibdienste, die ausschließlich auf das Web ausgerichtet sind.

Definieren wir den Zweck der ASP.NET-Web-API

Die ASP.NET-Web-API ist die Technologie von Microsoft zur Entwicklung von REST-basierten HTTP-Webdiensten. (Es hat vor langer Zeit Microsofts ASMX ersetzt, das auf SOAP / WSDL basierte.) Die Web-API erleichtert das Schreiben robuster Dienste auf der Grundlage von HTTP-Protokollen, die alle Browser und nativen Geräte verstehen. Auf diese Weise können Sie Dienste zur Unterstützung Ihrer Anwendung erstellen und diese von anderen Webanwendungen, Tablets, Mobiltelefonen, PCs und Spielekonsolen aus aufrufen. Die meisten Anwendungen, die heute geschrieben wurden, um die allgegenwärtige Webverbindung zu nutzen, verwenden HTTP-Dienste in irgendeiner Weise.

Definieren wir nun den Zweck von WCF:

Die Kommunikation über das Internet ist nicht immer das effizienteste Mittel. Wenn beispielsweise sowohl der Client als auch der Dienst auf derselben Technologie (oder sogar auf demselben Computer) vorhanden sind, können sie häufig ein effizienteres Kommunikationsmittel (z. B. TCP / IP) aushandeln. Serviceentwickler trafen dieselben Entscheidungen, die sie vermeiden wollten. Sie müssten sich nun zwischen der Schaffung effizienter interner Dienste und dem breiten Zugang über das Internet entscheiden. Und wenn sie beide unterstützen müssten, müssten sie möglicherweise mehrere Versionen ihres Dienstes oder zumindest separate Proxys für den Zugriff auf ihren Dienst erstellen. Dies ist das Problem, das Microsoft mit WCF gelöst hat .

Mit WCF können Sie Ihren Service ohne Rücksicht auf Grenzen erstellen. Sie können WCF dann die Möglichkeit geben, Ihren Dienst je nach anrufendem Client auf die effizienteste Weise auszuführen. Um diese Aufgabe zu verwalten, verwendet WCF das Konzept der Endpunkte. Ihr Dienst verfügt möglicherweise über mehrere Endpunkte (konfiguriert zur Entwurfszeit oder nach der Bereitstellung). Jeder Endpunkt gibt an, wie der Dienst einen anrufenden Client unterstützen kann: über das Web, über Remoting, über Microsoft Message Queuing (MSMQ) und mehr. Mit WCF können Sie sich auf die Erstellung Ihrer Servicefunktionen konzentrieren. Es macht sich Sorgen darüber, wie man am effizientesten mit anrufenden Kunden spricht. Auf diese Weise kann ein einzelner WCF-Dienst viele verschiedene Clienttypen effizient unterstützen.

Beispiel für WCF:

Betrachten Sie das Beispiel:

Die Kundendaten werden zwischen den Anwendungen geteilt. Jede Anwendung kann auf einer anderen Plattform geschrieben sein und an einem anderen Speicherort vorhanden sein. Sie können die Kundenschnittstelle in einen WCF-Dienst extrahieren, der gemeinsamen Zugriff auf gemeinsam genutzte Kundendaten bietet. Dies zentralisiert die Daten, reduziert Doppelarbeit, eliminiert die Synchronisation und vereinfacht die Verwaltung. Darüber hinaus können Sie mithilfe von WCF die Service-Endpunkte so konfigurieren, dass sie für den aufrufenden Client sinnvoll sind. Abbildung zeigt das Beispiel von zuvor mit zentralem Zugriff auf Kundendaten in einem WCF-Dienst.

Auf diese Weise bedient WCF verschiedene Clients

Fazit:

i) Wann Sie die Web-API auswählen sollten:

Es ist nicht zu leugnen, dass REST-basierte HTTP-Dienste, wie sie mit der ASP.NET-Web-API erstellt wurden, zum Standard für die Erstellung von Webdiensten geworden sind. Diese Dienste bieten Webentwicklern, die Dienste erstellen, einen einfachen und unkomplizierten Ansatz. Webentwickler verstehen HTTP GET und POST und passen sich daher gut an diese Art von Diensten an. Wenn Sie Dienste schreiben , die ausschließlich auf HTTP ausgerichtet sind , ist die ASP.NET-Web-API daher die logische Wahl.

ii) Wann man WCF wählt:

Die WCF-Technologie ist nützlich, wenn Sie mehrere Service-Endpunkte basierend auf unterschiedlichen Protokollen und Nachrichtenformaten unterstützen müssen. Produkte wie Microsoft BizTalk nutzen WCF, um robuste Dienste zu erstellen, die auch über das Web über verschiedene Computer-zu-Computer-Konfigurationen verwendet werden können. Wenn Sie jedoch eine Anwendung schreiben müssen, die über TCP / IP kommuniziert, wenn eine Verbindung zum lokalen Netzwerk besteht Netzwerk und arbeitet über HTTP, wenn außerhalb des Netzwerks, WCF ist Ihre Antwort .

Sei gewarnt:

Webentwickler betrachten WCF häufig als schwieriger und komplexer zu entwickeln. Wenn Sie die Notwendigkeit von Multiprotokolldiensten nicht vorhersehen, bleiben Sie wahrscheinlich bei der ASP.NET-Web-API.

Muhammad Waqas Dilawar
quelle
1
Bitte fügen Sie nicht dieselbe Antwort auf mehrere Fragen hinzu . Beantworten Sie die beste Frage und kennzeichnen Sie den Rest als Duplikate, sobald Sie genügend Ruf erworben haben. Wenn es sich nicht um ein Duplikat handelt, passen Sie den Beitrag an die Frage an und markieren Sie ihn zum Löschen.
Bhargav Rao
12

Es gibt einen Vergleich auf MSDN dazu

WCF- und ASP.NET-Web-API

Für mich ging es darum, wer die Kunden sind und wo sie sich befinden.

Innerhalb des Unternehmens Netzwerk- und .NET-basierte Clients: Verwenden Sie WCF mit TCP-Bindung (schnelle Kommunikation als HTTP)

Außerhalb des Unternehmensnetzwerks und verwenden Sie verschiedene Technologien wie PHP, Python usw . : Verwenden Sie die Web-API mit REST

Arshad Mohammad
quelle
9

In geschäftlicher Hinsicht fehlt WebApi eine WSDL, daher sollten die Entwickler alle manuell dokumentieren. Wenn beispielsweise die WebApi-Operation eine Liste von Objekten zurückgibt, sollte der Client die Objekte manuell erstellen, dh WebAPI ist wirklich anfällig für Definitionsfehler.

Der Profi von Webapi ist leichter als WCF.

Magallane
quelle
3
WCF == WS- *, webapi == REST
BozoJoe
7

In Bezug auf die Anweisung "WebApi fehlt WSDL" gibt es verschiedene Möglichkeiten, einen Rest-Client zu generieren. Ein beliebter Ansatz ist Swagger UI / (Swashbukkle Nuget). Dies bietet eine umfangreiche Oberfläche zum Verständnis des Eingabe- und Ausgabeschemas des REST-Endpunkts und ein Online-Tool zum Testen der Endpunkte.

JSON LD (Json Linked Documents) ist ein weiterer neuer Standard, der die JSON-basierte REST-Entwicklererfahrung weiter verbessern wird, indem das JSON-Schema mit einer besseren Semantik verfügbar gemacht wird.

Venkatesh Muniyandi
quelle
1

Mit wcf können wir dieselbe Serviceunterstützung für mehrere Endpunkte wie tcp und http konfigurieren und verfügbar machen. Wenn Sie möchten, dass Ihr Service nur auf http basiert, ist es besser, die Web-API zu verwenden. Die Web-API hat im Vergleich zu wcf eine sehr geringe Konfiguration und ist etwas schneller als wcf. Wcf unterstützt auch erholsame Dienste. Wenn Sie die Einschränkung von .Net Framework 3.5 haben, ist Ihre Option wcf.

Nayas Subramanian
quelle