c# rest - WCF vs ASP.NET Web API




nachfolger (9)

Ich habe ein paar Monate damit zugebracht, die Konzepte von WCF zu verstehen, und kürzlich habe ich meine erste WCF-Dienstanwendung entwickelt.

Ich habe ziemlich viel gekämpft, um alle Einstellungen in der Konfigurationsdatei zu verstehen.
Ich bin nicht von der Umwelt überzeugt, aber es scheint, dass Sie erstaunliche Sachen damit machen können.

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

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

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 von jedem zu verstehen?


Answers

ASP.net Web API ist alles über HTTP und REST-basierte GET, POST, PUT, DELETE mit gut bekannten ASP.net MVC Stil der Programmierung und JSON rückgabefähig; Web-API ist für alle leichten Prozess- und reinen HTTP-basierten Komponenten. Damit WCF auch für den einfachen oder einfachsten Web-Service genutzt werden kann, wird zusätzliches Gepäck mitgebracht. Für leichten, einfachen Service für Ajax oder dynamische Anrufe löst WebApi immer nur das Bedürfnis. Dies ergänzt oder hilft parallel zum ASP.net MVC.

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


WCF wird Ihnen so viel bieten, dass es mit nichts vergleichbar ist. Es sei denn, Sie möchten auf Ihre eigene Implementierung von (um nur einige zu nennen) Authentifizierung, Autorisierung, Verschlüsselung, Warteschlangenbildung, Drosselung, zuverlässiges Messaging, Protokollierung, Sitzungen und so weiter. WCF ist nicht [nur] Web-Dienste; WCF ist eine Entwicklungsplattform für SOA.


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

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 ASP.NET Web API eine gute Wahl sein.


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

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

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

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

HTTP-Services-Header gibt an, wie der Service gesichert wird, wie die Informationen zwischengespeichert werden, der Typ des Nachrichtentexts und der HTTP-Body kann jeden Inhaltstyp wie HTML und nicht nur XML als SOAP-Services angeben.


Bezüglich der Aussage "WebApi fehlt von WSDL" gibt es mehrere Möglichkeiten, Rest-Client zu erzeugen. Ein beliebter Ansatz ist Swagger UI / (Swashbukkle Nuget). Dies bietet eine reichhaltige Benutzeroberfläche, um das Eingabe- und Ausgabeschema des REST-Endpunkts und das Online-Tool zum Testen der Endpunkte zu verstehen.

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 versehen wird.


Mit wcf können wir den gleichen Service-Support für mehrere Endpunkte wie tcp, http konfigurieren und verfügbar machen. Wenn Sie möchten, dass Ihr Service nur http-basiert ist, ist es besser, mit der Web-API zu gehen. Web-API hat im Vergleich zu WCF sehr weniger Konfiguration und ist etwas schneller als der WCF. Wcf unterstützt auch erholsame Dienste. Wenn Sie eine Beschränkung von .Net Framework 3.5 haben, dann ist Ihre Option wcf.


Es gibt einen Vergleich auf MSDN darüber

WCF- und ASP.NET-Web-API

Für mich war die Entscheidung, 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 Unternehmens Netzwerk, und verschiedene Technologien wie PHP, Python usw. verwenden : Verwenden Sie Web-API mit REST



in Fortsetzung zu @ Cuong Les Antwort wäre mein Ansatz, Wiederholungsangriffe zu verhindern

// Verschlüsseln Sie die Unix-Zeit auf Client-Seite mit dem freigegebenen privaten Schlüssel (oder Benutzer-Passwort)

// Senden Sie es als Teil des Anfrage-Headers zum Server (WEB-API)

// Entschlüsselung der Unix-Zeit am Server (WEB-API) mit dem freigegebenen privaten Schlüssel (oder dem Benutzerpasswort)

// Überprüfen Sie den Zeitunterschied zwischen der Unixzeit des Clients und der Unixzeit des Servers, sollte nicht größer als x Sek. Sein

// Wenn Benutzer-ID / Hash-Passwort korrekt sind und die entschlüsselte UnixTime innerhalb von x Sek. der Serverzeit liegt, dann ist dies eine gültige Anfrage





c# wcf asp.net-web-api