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?
quelle
Antworten:
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.
quelle
HttpClient
was großartig ist, aber es kümmert sich nicht um die Erzeugung von Entitäten und die Serialisierung / Deserialisierung.INotifyPropertyChanged
Client-Entitäten ausgeben ? Wie wäre es mit einer Validierung?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 :
quelle
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.
quelle
In den unten aufgeführten Szenarien sollten Sie sich für WCF entscheiden:
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.
quelle
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.
Hinweis: Die Daten sind nicht nur meine Ansicht, sondern werden auch von anderen offiziellen Websites gesammelt.
quelle
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.
quelle
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.
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.
quelle
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
quelle
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.
quelle
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.
quelle
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.
quelle