WCF vs ASP.NET Web API [fermé]

484

J'ai passé quelques mois à essayer de comprendre les concepts derrière WCF et récemment j'ai développé ma première application de service WCF.

J'ai eu beaucoup de mal à comprendre tous les paramètres du fichier de configuration.
Je ne suis pas convaincu de l'environnement mais il semble que vous puissiez faire des choses incroyables avec.

L'autre jour, j'ai découvert que Microsoft a sorti une nouvelle chose appelée ASP.NET Web API .

Pour ce que je peux lire, c'est un framework RESTful , très facile à utiliser et à implémenter.

Maintenant, j'essaie de comprendre quelles sont les principales différences entre les 2 cadres et si je devrais essayer de convertir mon ancienne application de service WCF avec la nouvelle API.

Quelqu'un pourrait-il, s'il vous plaît, m'aider à comprendre les différences et l'utilisation de chacun?

LeftyX
la source
12
+1 question intéressante. vous obtiendrez peut-être de bonnes réponses sur programmers.stackexchange.com
Mithir
1
Quelles fonctionnalités de «l'ancien» WCF utilisez-vous? Essayez-vous de créer une API RESTful? Ou RPC, ou SOAP?
marcind
1
@marcind: merci pour votre réponse. Ce sont principalement des appels RESTful. Pas de RPC du tout.
LeftyX
4
Une autre bonne réponse peut être trouvée sur stackoverflow.com/a/9859981/456814
1
les deux sont une seule et même chose, mais la vieille différence que l'on pourrait trouver serait que le wcf est essentiellement pour l'intranet et Webapi pour Internet, oui, nous pouvons certainement rendre le wcf reposant aussi! Fondamentalement, les deux ont fonctionné sur le protocole http web.http
LostCoder

Réponses:

185

La nouvelle API Web ASP.NET est une continuation du précédent projet d' API Web WCF (bien que certains concepts aient changé ).

WCF a été créé à l'origine pour activer les services SOAP. Pour des services RESTful ou RPCish plus simples (pensez aux clients comme jQuery), l'API Web ASP.NET devrait être un bon choix.

marcind
la source
36
Aussi: bien que WCF fournisse une certaine prise en charge pour l'écriture de services de style REST, la prise en charge de REST dans l'API Web ASP.NET est plus complète et toutes les futures améliorations des fonctionnalités REST seront apportées dans l'API Web ASP.NET msdn.microsoft.com/en- fr / library / jj823172.aspx
Ohad Schneider
6
En fait, WCF a été initialement créé pour implémenter une couche d'abstraction entre un service SOAP ou RPC et le client. Le but était de créer une architecture unique (ABC) autour de ces deux appels très différents et de gérer la plomberie via des fichiers de configuration.
Scott Marcus
4
Le véritable inconvénient de l'API Web ASP.NET est son outillage client. Visual Studio prend en charge des outils intégrés pour prendre en charge les entités clientes de service WCF et la génération de services. Pas de support dans l'API Web. Je sais qu'il y a ce HttpClientqui est génial, mais il ne s'occupe pas de la génération d'entités et de la sérialisation / désérialisation.
Shimmy Weitzhandler
1
@Shimmy Qu'en est-il de la génération de services à l'aide de swagger?
Alex78191
1
@ Alex78191 merci pour votre réponse. Les entités générées peuvent-elles émettre INotifyPropertyChangeddes entités clientes? Et la validation?
Shimmy Weitzhandler
250

Pour nous, WCF est utilisé pour SOAP et l'API Web pour REST. Je souhaite également que l'API Web soit compatible avec SOAP. Nous n'utilisons pas les fonctionnalités avancées de WCF. Voici une comparaison de MSDN :

entrez la description de l'image ici

Manish Jain
la source
1
Et l'API Web prend en charge OData qui, pour CSOM, est une aubaine.
abbaf33f
12
C'est incroyable de voir comment MS avec tant de choses ne dit rien de vraiment digne. Par exemple, WCF prend en charge JSON mais ces informations sont bien cachées dans cette "comparaison", alors qu'il indique textuellement que WebApi prend en charge JSON non pas une mais deux fois.
magallanes
1
ce tableau n'a pas de sens. "JQuery" (guillemets effrayants pour le J majuscule) est un protocole et / ou un format?
hyankov le
1
Intéressant. MSDN a tort de mentionner HTTP comme protocole de transport. HTTP est un protocole de couche application.
RayLoveless
80

L'API Web ASP.net est entièrement basée sur HTTP et REST GET, POST, PUT, DELETE avec un style de programmation ASP.net MVC bien connu et renvoyable JSON; L'API Web est destinée à tous les processus légers et aux composants HTTP purs. Pour aller de l'avant avec WCF, même pour un service Web simple ou simple, il apportera tous les bagages supplémentaires. Pour un service simple et léger pour les appels ajax ou dynamiques, WebApi résout toujours le besoin. Cela complète parfaitement ou aide en parallèle au MVC ASP.net.

Consultez le podcast: Hanselminutes Podcast 264 - Ce n'est pas la WCF de votre père - Tout sur le WebAPI avec Glenn Block de Scott Hanselman pour plus d'informations.

Naveen Vijay
la source
67

Dans les scénarios répertoriés ci-dessous, vous devriez opter pour WCF:

  1. Si vous devez envoyer des données sur des protocoles tels que TCP, MSMQ ou MIME
  2. Si le client consommateur sait juste comment consommer les messages SOAP

L'API WEB est un cadre pour développer des services RESTful / HTTP.

Il y a tellement de clients qui ne comprennent pas SOAP comme les navigateurs, HTML5, dans ces cas, les API WEB sont un bon choix.

L'en-tête des services HTTP spécifie comment sécuriser le service, comment mettre en cache les informations, le type du corps du message et le corps HTTP peut spécifier tout type de contenu comme HTML et pas seulement XML comme services SOAP.

Kris
la source
7
Cela fait l'hypothèse que WCF ne gère que les messages SOAP, une hypothèse incorrecte. Vous pouvez également exposer les points de terminaison REST sur les services WCF. Je le modifierais pour dire que si vous n'utilisez pas les fonctionnalités de WCF (voir le message de Tridy), alors l'API Web a du sens.
Mike
3
Oui, WCF fait aussi du repos. Fondamentalement, l'API Web est un sous-ensemble de fonctionnalités WCF qui est approprié si vous faites des applications de données de style CRUD simples.
user1496062
41

Depuis que j'utilise les deux jusqu'à maintenant, j'ai trouvé de nombreuses différences entre WCF et Web API. Les deux piles technologiques sont bien adaptées à différents scénarios, il n'est donc pas possible de dire lequel est le meilleur, cela dépend de la configuration et du scénario.

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

Remarque: Les données ne sont pas seulement mon avis, elles sont également collectées sur d'autres sites Web officiels.

Rajput
la source
12
L'API de service Web peut également être auto-hébergée (Owin / Katana) ainsi que dans un service Windows
Monis Iqbal
moins 1 pour la création du tableau à l'aide d'une image au lieu de HTML car cela empêche la modification de la réponse pour amélioration.
Ahsan Ahmed
34

WCF vous donnera tellement de choses hors de la boîte, ce n'est même comparable à rien. À moins que vous ne vouliez faire sur votre propre implémentation (pour n'en nommer que quelques-uns) l'authentification, l'autorisation, le chiffrement, la mise en file d'attente, la limitation, la messagerie fiable, la journalisation, les sessions, etc. WCF n'est pas [seulement] des services Web; WCF est une plate-forme de développement pour SOA.

tridy
la source
11
Si je ne me trompe pas, je pense que l'API WEB fournit également la plupart des fonctions que vous avez répertoriées.
Alex
4
Aucune API Web ne fournit ces éléments ou ne propose des versions très simples.
user1496062
3
Eh bien, qu'est-ce que cela - leur fournit-il ou non?
5
Pour l'authentification et l'autorisation, consultez asp.net/web-api/overview/security/… . tl; dr: Il le supporte définitivement dans IIS. Pour le chiffrement, vous devrez probablement utiliser SSL, ASP.NET gère naturellement la mise en file d'attente (mais c'est directement basé sur les threads de travail disponibles par rapport aux demandes entrantes). Les sessions existent (mais je ne recommanderais jamais d'utiliser directement les sessions). La journalisation est assez facile à configurer (via ActionFilters ou autre). Une alternative à la messagerie fiable utilise SignalR (mais pas exactement).
James Haug
7
"Pas comparable à quoi que ce soit" ?? Peu probable.
bbsimonbb
16

Pourquoi je réponds:

J'ai pris énormément de temps pour comprendre la différence entre ces deux technologies. Je vais mettre tous ces points ici que je pense "Si j'avais ces points au moment où je me demandais à la recherche de cette réponse, alors j'ai décidé très tôt dans le choix de ma technologie requise."

Source d'information:

Microsoft® Visual Studio® 2015 déchaîné

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

Pourquoi l'API Web ASP.NET et WCF:

Avant de comparer les technologies de l'API Web ASP.NET et de WCF, il est important de comprendre qu'il existe en fait deux styles / normes pour la création de services Web: REST (Representational State Transfer) et SOAP / WSDL. SOAP / WSDL était la norme d'origine sur laquelle les services Web étaient construits. Cependant, il était difficile à utiliser et avait des formats de message volumineux (comme XML) qui dégradaient les performances. Les services basés sur REST sont rapidement devenus l'alternative. Ils sont plus faciles à écrire car ils exploitent les constructions de base de HTTP (GET, POST, PUT, DELETE) et utilisent généralement des formats de message plus petits (comme JSON). Par conséquent, les services HTTP basés sur REST sont désormais la norme pour les services d'écriture qui ciblent strictement le Web.

Définissons le but de l'API Web ASP.NET

L'API Web ASP.NET est la technologie de Microsoft pour développer des services Web HTTP basés sur REST. (Il a depuis longtemps remplacé l'ASMX de Microsoft, qui était basé sur SOAP / WSDL.) L'API Web facilite l'écriture de services robustes basés sur des protocoles HTTP que tous les navigateurs et appareils natifs comprennent. Cela vous permet de créer des services pour prendre en charge votre application et de les appeler à partir d'autres applications Web, tablettes, téléphones mobiles, PC et consoles de jeux. La majorité des applications écrites aujourd'hui pour tirer parti de la connexion Web toujours présente utilisent les services HTTP d'une manière ou d'une autre.

Définissons maintenant le but de WCF:

Communiquer sur Internet n'est pas toujours le moyen le plus efficace. Par exemple, si le client et le service existent sur la même technologie (ou même la même machine), ils peuvent souvent négocier un moyen de communication plus efficace (tel que TCP / IP). Les développeurs de services se sont retrouvés à faire les mêmes choix qu'ils essayaient d'éviter. Il leur faudrait désormais choisir entre créer des services internes efficaces et pouvoir bénéficier du large accès trouvé sur Internet. Et, s'ils devaient prendre en charge les deux, ils pourraient avoir à créer plusieurs versions de leur service ou au moins des procurations distinctes pour accéder à leur service. C'est le problème que Microsoft a résolu avec WCF .

Avec WCF, vous pouvez créer votre service sans vous soucier des limites. Vous pouvez ensuite laisser WCF s'inquiéter de l'exécution de votre service de la manière la plus efficace, selon le client appelant. Pour gérer cette tâche, WCF utilise le concept de points de terminaison. Votre service peut avoir plusieurs points de terminaison (configurés au moment de la conception ou après le déploiement). Chaque point de terminaison indique comment le service peut prendre en charge un client appelant: sur le Web, via l'accès à distance, via Microsoft Message Queuing (MSMQ), etc. WCF vous permet de vous concentrer sur la création de vos fonctionnalités de service. Il s'inquiète de la façon de parler le plus efficacement possible avec les clients appelants. De cette façon, un seul service WCF peut prendre en charge efficacement de nombreux types de clients différents.

Exemple de WCF:

Prenons l'exemple:

Les données client sont partagées entre les applications. Chaque application peut être écrite sur une plate-forme différente et peut exister dans un emplacement différent. Vous pouvez extraire l'interface client dans un service WCF qui fournit un accès commun aux données client partagées. Cela centralise les données, réduit la duplication, élimine la synchronisation et simplifie la gestion. De plus, en utilisant WCF, vous pouvez configurer les points de terminaison de service pour qu'ils fonctionnent de la manière qui convient au client appelant. La figure montre l'exemple précédent avec un accès centralisé aux données client dans un service WCF.

C'est ainsi que WCF sert différents clients

Conclusion:

i) Quand choisir l'API Web:

Il ne fait aucun doute que les services HTTP basés sur REST comme ceux créés à l'aide de l'API Web ASP.NET sont devenus la norme pour la création de services Web. Ces services offrent une approche simple et directe aux développeurs de services de création de sites Web. Les développeurs Web comprennent HTTP GET et POST et s'adaptent donc bien à ces types de services. Par conséquent, si vous écrivez des services strictement ciblés sur HTTP , l'API Web ASP.NET est le choix logique.

ii) Quand choisir WCF:

La technologie WCF est utile lorsque vous devez prendre en charge plusieurs points de terminaison de service en fonction de différents protocoles et formats de message. Des produits comme Microsoft BizTalk exploitent WCF pour créer des services robustes qui peuvent être utilisés sur le Web ainsi que via différentes configurations de machine à machine.Si, cependant, vous devez écrire une application qui communique sur TCP / IP lorsqu'elle est connectée au réseau local réseau et fonctionne sur HTTP en dehors du réseau, WCF est votre réponse .

Être averti:

Les développeurs Web considèrent souvent WCF comme plus difficile et plus complexe à développer. Par conséquent, si vous ne prévoyez pas la nécessité de services multiprotocoles, vous vous en tiendriez probablement à l'API Web ASP.NET.

Muhammad Waqas Dilawar
la source
1
Veuillez ne pas ajouter la même réponse à plusieurs questions . Répondez à la meilleure et marquez les autres comme des doublons, une fois que vous gagnez suffisamment de réputation. S'il ne s'agit pas d'un doublon, adaptez le message à la question et indiquez-le pour suppression.
Bhargav Rao
12

Il y a une comparaison sur MSDN à ce sujet

API Web WCF et ASP.NET

Pour moi, le choix portait sur qui sont les clients et où sont-ils situés?

Au sein du réseau de l'entreprise et des clients basés sur .NET: utilisez WCF avec la liaison TCP (communication rapide que HTTP)

En dehors du réseau de l'entreprise, et utilisez diverses technologies comme PHP, Python, etc .: utilisez l'API Web avec REST

Arshad Mohammad
la source
9

Pour parler affaires, WebApi n'a pas de WSDL, donc les développeurs doivent tout documenter manuellement. Et si, par exemple, l'opération WebApi renvoie une liste d'objets, le client doit créer les objets manuellement, c'est-à-dire que WebAPI est vraiment sujet aux erreurs de définitions.

Le pro de Webapi est son plus léger que WCF.

magallanes
la source
3
WCF == WS- *, webapi == REST
BozoJoe
7

En ce qui concerne la déclaration "WebApi manque de WSDL", il existe plusieurs façons de générer le client Rest. Une approche populaire est Swagger UI / (Swashbukkle Nuget). Cela donne une interface riche pour comprendre le schéma d'entrée et de sortie du point de terminaison REST et un outil en ligne pour tester les points de terminaison.

JSON LD (Json Linked Documents) est une autre norme émergente qui améliorera encore l'expérience du développeur REST basé sur JSON en exposant le schéma JSON avec une meilleure sémantique.

Venkatesh Muniyandi
la source
1

Avec wcf, nous pouvons configurer et exposer le même support de service pour plusieurs points de terminaison comme tcp, http. Si vous voulez que votre service soit uniquement basé sur http, il sera préférable d'utiliser l'API Web. L'API Web a une configuration très inférieure par rapport à wcf et est un peu plus rapide que wcf. Wcf prend également en charge des services reposants. Si vous avez une limitation de .Net Framework 3.5, votre option est wcf.

Nayas Subramanian
la source