WCF vs ASP .Net Web API


93

Was sind die Vor- und Nachteile jeder Technologie?

Die WCF-Web-API wird jetzt in Asp.net zusammengeführt. Die Asp.net-Web-API unterstützt jetzt Self-Hosting.

Ich stelle mir immer noch vor, wenn ich mehrere Protokollschemata für denselben Vorgang verfügbar machen möchte, würde ich mich immer noch zu WCF neigen, oder kann der Mvc-Endpunkt dies auch tun?

Macht die neue Asp.Net-Web-API auch Wsdl verfügbar? Wenn nicht, wie würde der Client herausfinden, welche Operation für ihn verfügbar ist?

Das wohl beste Merkmal von Mvc ist der Modellbinder. Wie robust ist das WCF-Äquivalent?

Kann mir jemand sagen, welchen Vorteil die Asp.net-Web-API bietet? WCF scheint überwiegend die leistungsfähigere / skalierbarere Wahl zu sein, imo. Das einzige, was die Mvc Web Api gegenüber dem WCF-Modell hat, ist wahrscheinlich die einfache Entwicklung, aber das bedeutet Kniebeugen, wenn es später zu einer ernsthaften Designbeschränkung wird.


15
Ich finde den Titel dieser Frage etwas irreführend. Der Titel lautet "MVC 4 vs Wcf Web Api", aber die Frage scheint sich mehr mit WCF vs ASP .Net Web API zu befassen. Aus dem Titel ging hervor, dass das Standard-MVC 4-Framework (Controller, Modelle, Ansichten) mit dem ASP .Net-Web-API-Framework verglichen wurde. Findet sonst noch jemand diesen Titel irreführend?
Bruce Hill

Antworten:


72

Zunächst schlage ich vor, dass Sie meinen Beitrag zum Thema lesen: http://blogs.microsoft.co.il/blogs/idof/archive/2012/03/05/wcf-or-asp-net-web-apis-my- zwei Cent auf das Thema.aspx

Zu Ihrer WSDL-Frage: Da WebApi kein SOAP verwendet, ist keine WSDL erforderlich und es wird keine exportiert. Sie können Hypermedia verwenden, um Ressourcen mit einer Liste möglicher Aktivitäts-URLs zurückzugeben (stellen Sie sich diese als selbstbeschreibende Ressource vor).


6
Das ist ein sehr sehr guter Bericht. Das beste, das ich je gesehen habe. Aber ich bin jetzt verwirrter als je zuvor. WebApi fügt so viel hinzu, aber die Unfähigkeit, andere Endpunkte verfügbar zu machen, scheint sehr restriktiv zu sein. Wenn Sie einen Client hatten, der Seife verwenden kann, müssen diese jetzt die Aktion erstellen und das Ergebnis von Hand analysieren, wenn Seife den gesamten Kontext für sie generiert haben könnte. Sie werden sie auch für die erweiterte Soap-Funktion wie zuverlässige Sitzung und Acid-Transaktion sperren ... seufz.
Alwyn

2
@Alwyn - Ich denke, dass alle Fakten, die Sie erwähnt haben, wahr sind und Sie daher nicht verwirren, sondern Ihnen bei der Entscheidung helfen sollten. Die Web-API hat ihre eigenen Vorteile. Wenn Ihr Dienst jedoch von mehreren Endpunkten einschließlich anderer Protokolle verfügbar gemacht werden muss, oder Sie haben ein starkes Bedürfnis nach der Funktion zur automatischen Generierung des Clients oder nach erweiterten Funktionen für Seife - dies könnte eine Überlegung sein, warum Sie WCF der Web-API
vorziehen sollten

@BornToCode: Client-Code kann mit WebAPI automatisch generiert werden. Mit dem WebAPI-Code können Sie eine Swagger-JSON-Datei erstellen. Diese JSON-Datei kann dann von einem Codegenerator wie swagger-codegen verwendet werden, um Client-Code in einer großen Anzahl von Zielsprachen zu erzeugen.
ungewollt leer gelassen

@unintentionallyleftblank - IMHO Es ist immer noch "benutzerfreundlicher", Client-Code automatisch über WCF zu generieren als über die Web-API.
BornToCode

15

Die Wahl hängt davon ab, was wir tun möchten.

  1. Die ASP.NET-Web-API ist ein Framework zum Erstellen von nicht SOAP-basierten Diensten nur über HTTP. Daher sind mit diesem Framework keine weiteren Transportprotokolle verfügbar.
  2. WCF / Windows Communication Foundation ist ein Framework für den Austausch von SOAP-basierten Nachrichten. Hier verwenden wir viele Transportprotokolle: HTTP, TCP, Named Pipes, MSMQ usw.

Ich bin mir nicht sicher, welche hinsichtlich der Datenmenge eine bessere Leistung aufweist, möglicherweise WCF, da wir niedrige Protokolle verwenden können. Kommentare sind willkommen.


2
Nichts für ungut, aber HTTP ist nur ein Protokoll auf Anwendungsebene . Es gibt keine inhärente Einschränkung, welche Transportschichtprotokolle verwendet werden können.
Smwikipedia

8

Die WCF-Web-API konzentriert sich hauptsächlich auf REST-Implementierungen. Wenn Sie eine REST-Implementierung einrichten, sind die Standard-WCF-Bits im hinteren Bereich etwas schmerzhaft. Wenn Sie RESTful-Services einrichten, wird die WCF-Web-API eine viel schönere Erfahrung sein. Wenn Sie SOAP-Dienste einrichten, ist die WCF-Web-API nicht Ihr bester Freund, und Sie sollten WCF besser für Ihre Dienste verwenden.


2
Ja, die Konfigurationen sind ein Schmerz, aber es sind einmalige Einrichtungskosten. Sobald Sie dies getan haben, können Sie das Verhalten / den Endpunkt so gut wie kopieren und in einen anderen Dienst einfügen. Die meiste Zeit erhalten Sie, indem Sie die neuen Vorgänge nur mit WebGet markieren. Auf der anderen Seite, wenn Sie jemals einen Client bekommen, der Soap + Wsdl verwenden möchte, ist dies alles nur eine Konfigurationsänderung im Gegensatz zu Code + Deploy + QA + dem Rest. Wie ist Mvc Web Api besser?
Alwyn

1
Wenn Sie mit WCF bereits vertraut sind, können Sie diesen Weg fortsetzen. Zusätzlich zu dem, was ich erwähnt habe, gibt es einige interne Verbesserungen von REST in der WCF-Web-API (ich habe die Liste nicht vor mir), aber beide können funktionieren und ich würde keine Wochen mit Refactoring verbringen, wenn Sie Tonnen davon haben Arbeitsdienste, insb. da es einen gewissen Paradigmenwechsel im Denken gibt. Für zukünftige Arbeiten würde ich jedoch die WCF-Web-API in Betracht ziehen. Aber ich bin schon seit einiger Zeit mit der WCF-Web-API beschäftigt, daher bin ich möglicherweise voreingenommen.
Gregory A Beamer

0

Verwenden Sie WCF für Intranet- / B2B-Sites. N Web-API für B2C / C2C / Internetseiten. SOAP / XML ist immer noch der Standard für die unternehmensinterne Kommunikation. Es wird nicht verschwinden !!!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.