Quelles sont les différences entre les services Web WCF et ASMX?

375

Je suis totalement confus entre les services Web WCF et ASMX. J'ai utilisé beaucoup de services Web dans ma phase précédente, et maintenant il y a cette nouvelle chose introduite appelée WCF. Je peux toujours créer WCF qui fonctionne comme un service Web. Je pense qu'il y aura plus de choses dans WCF.

Quelles sont les différences entre WCF et les services Web? Quand faut-il utiliser chacun d'eux?

shailesh
la source
5
Il n'y a aucun moyen que ce soit une question de recommandation. Ni ASMX ni WCF n'est un produit. Ce sont deux itérations de services Web dans la pile Microsoft. La question est de savoir quelles sont les différences et cela vaut-il la peine que j'apprenne la nouvelle? Ce n'est pas la même chose que "devrais-je utiliser des commandes Telerik ou des infrastructures.
John Saunders

Réponses:

391

Keith Elder compare bien ASMX à WCF ici. Vérifiez-le.

Une autre comparaison d'ASMX et de WCF peut être trouvée ici - je ne suis pas d'accord à 100% avec tous les points, mais cela pourrait vous donner une idée.

WCF est fondamentalement "ASMX sur les stéréoïdes" - il peut être tout ce que l'ASMX pourrait - et bien plus encore!.

ASMX c'est:

  • facile et simple à écrire et à configurer
  • disponible uniquement dans IIS
  • uniquement appelable depuis HTTP

WCF peut être:

  • hébergé dans IIS, un service Windows, une application Winforms, une application console - vous avez une liberté totale
  • utilisé avec HTTP (REST et SOAP), TCP / IP, MSMQ et bien d'autres protocoles

En bref: WCF est là pour remplacer complètement ASMX.

Consultez le WCF Developer Center sur MSDN .

Mise à jour: le lien semble être mort - essayez ceci: Qu'est- ce que Windows Communication Foundation?

marc_s
la source
15
Avec Visual Studio 2010 .net 4.0 WCF est tout aussi facile à écrire que ASMX, il n'y a plus d'excuse pour écrire ASMX. WCF est beaucoup plus rapide, plus flexible et plus sûr. ASMX est hérité et personne ne devrait encore l'écrire.
Tom Stickel
13
"La plupart des développeurs supposent à tort qu'ASMX nécessite IIS; après tout, c'est le seul cas d'utilisation qu'ils aient jamais vu. Mais la vérité est qu'ASMX n'a ​​aucune dépendance technique sur IIS." msdn.microsoft.com/en-us/magazine/cc163879.aspx
MrNick
2
@MrNick: à droite. Pas d'IIS, mais toujours HTTP uniquement, et allez comparer le code d'hébergement ASMX au code d'hébergement d'un service WCF.
John Saunders
1
Malheureusement, le lien keithelder.net/2008/10/17/wcf-vs-asmx-webservices est rompu.
Robert
2
@codemonkeyliketab: la réponse a plus de 6 ans - des années -lumière à l'ère d'Internet! J'ai essayé de trouver un remplaçant pour le WCF Developer Center - voir ma mise à jour
marc_s
37

Les services Web ASMX ne peuvent être invoqués que par HTTP (service Web traditionnel avec .asmx). Alors que le service WCF ou un composant WCF peut être appelé par n'importe quel protocole (comme http, tcp, etc.) et tout type de transport.

Deuxièmement, les services Web ASMX ne sont pas flexibles. Cependant, les services WCF sont flexibles. Si vous créez une nouvelle version du service, vous devez simplement exposer une nouvelle fin. Par conséquent, les services sont agiles et c'est une approche très pratique qui regarde les tendances commerciales actuelles.

Nous développons WCF en tant que contrats, interface, opérations et contrats de données. En tant que développeur, nous nous concentrons davantage sur les services de logique métier et n'avons pas à nous soucier de la pile de canaux. WCF est une API de programmation unifiée pour tout type de services, nous créons donc le service et utilisons les informations de configuration pour configurer le mécanisme de communication comme HTTP / TCP / MSMQ, etc.

Experts NET
la source
11
C'est peut-être juste moi, mais les paragraphes # 2 et # 3 se démarquent comme marketing BS.
Neolisk
@Net Experts u a dit "Si vous créez une nouvelle version du service, vous devez simplement exposer une nouvelle fin", qu'essayez-vous de dire?
Mou
@Mou, il voulait dire en dévoiler un nouveau endpointje suppose. Comme<endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
AlexMelw
25

C'est une très vieille question, mais je ne pense pas que les avantages de l'ASMX aient été assez bien décrits. Bien qu'ils ne soient pas extrêmement flexibles, les services Web ASMX sont très simples à utiliser et à comprendre. Bien que WCF soit plus flexible, il est également plus complexe de se lever et de configurer.

Les services Web ASMX sont prêts à se lever et à s'ajouter en tant que référence de service Web dès que vous ajoutez le fichier. (en supposant que votre projet se construit)

Pour le flux de travail de développement simple de create webservice-> run webservice-> add webservice reference, un service Web ASMX a très peu de choses qui peuvent mal tourner, pas grand-chose que vous pouvez mal configurer, et c'est sa force.

En réponse à ceux qui affirment que WCF remplace ASMX, je répondrais que WCF devrait ajouter un mode de configuration KISS rationalisé afin de remplacer complètement ASMX.

Exemple web.config pour un service Web ASMX:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>
Andrew Hoffman
la source
Je ne pense pas que WCF ait besoin de plus de configuration pour le travail qui peut être fait en utilisant les services Web asmx, et vous pouvez également ajouter une référence dans votre côté client pour le service WCF, WCF est beaucoup plus puissant que asmx, il peut faire ce que asmx fait et ce sera aussi simple que asmx
Coder1409
9
@ Coder1409 et bien c'est certainement plus de configuration, car certaines choses doivent être configurées. Reliure, découvrabilité, etc. Pas nécessaire en asmx. Contrats de service, contrats d'exploitation, contrats de données, membres de données. Pas nécessaire dans asmx. Bien sûr, ces choses expliquent pourquoi wcf est supérieur et plus puissant, mais nier qu'il ajoute de la complexité n'est tout simplement pas honnête. Il s'agit de dire qu'il n'y a pas d'inconvénients.
Andrew Hoffman
7
La première (deuxième, troisième ...) fois que j'ai créé un wcf, il m'a fallu beaucoup de temps pour comprendre la configuration requise. "Pourquoi dois-je faire ça?" je n'arrêtais pas de me demander. "Pourquoi s'embêter avec quelque chose d'aussi complexe?". asmx a juste fonctionné instantanément. Donc, dire que c'est tout aussi simple n'est tout simplement pas vrai. Un jour, je comprendrai et changerai complètement de vue - jusqu'à ce jour GRRRR !!!
tomjm
1
@tomjm Encore une fois, essayez-le avec une version moderne de Visual Studio et .NET. Entre autres choses, le système de configuration a changé pour plus de paramètres par défaut. En particulier, vous n'aurez guère besoin de faire plus que de spécifier l'URL pour obtenir un service Web simple, http uniquement, sans fonctionnalités.
John Saunders
1
@tomjm Eh bien, c'est bon à savoir. Honnêtement, c'était tellement de configuration qu'il était logique d'utiliser une application de gestionnaire de configuration wcf. Ça pourrait tout faire! (sauf travailler hors de la boîte avec quelques bons paramètres par défaut) Cependant, de nos jours, nous pensons plus simplement aux services WEB. Wcf est toujours idéal pour les services avancés, mais .. probablement la majorité du développement de services est le développement de services Web, et il est difficile de battre webapi2 pour le développement de services Web imo.
Andrew Hoffman
10

WCF remplace complètement les services Web ASMX. ASMX est l'ancienne façon de faire des services Web et WCF est la façon actuelle de faire des services Web. Tout nouveau développement de service Web SOAP, sur le client ou le serveur, doit être effectué à l'aide de WCF.

John Saunders
la source
32
Le problème est que, alors que ASMX était un modèle simpliste (ce qui signifie pas terriblement flexible), c'était un modèle simple (ce qui signifie facile à utiliser et à comprendre pour les besoins de service Web les plus courants). WCF ajoute beaucoup de complexité supplémentaire. Bien que MS veuille remplacer ASMX par WCF, il semble y avoir un peu de résistance jusqu'à ce que MS rende les scénarios les plus courants aussi simples que l'ancienne méthode [Webmethod].
mattmc3
6
WCF n'est pas du tout complexe. Créez un service Web simple «bonjour le monde» dans les deux et voyez combien de code vous écrivez dans chacun. La réponse: pas grand-chose non plus, et seulement un peu plus dans WCF. Et, d' ailleurs, déjà ASMX a été remplacé par WCF. Terminé.
John Saunders
58
"WCF n'est pas du tout complexe" Ha. Dites-le à ma façon web.config surchargé.
mattmc3
26
(Pas un downvoter, mais je vais vous dire pourquoi) - parce que "c'est nouveau et c'est vieux" n'est pas une différence significative dont tout le monde devrait se soucier. Nous ne choisissons pas les outils uniquement en fonction de leur âge - le marteau est vraiment, vraiment vieux, mais c'est toujours le meilleur outil pour enfoncer les clous la plupart du temps. Donc, vous avez donné une réponse valable, ce n'est tout simplement pas très utile - comme la vieille blague "vous êtes dans un avion".
Jasmine
5
vote contre - aucune référence. Comment connaissez-vous ces informations? Est-ce une opinion? Travaillez-vous pour Microsoft? Ajoutez une référence et je voterai.
tomjm
7

Il y a beaucoup de discussions en cours concernant la simplicité des services Web asmx sur WCF. Permettez-moi de clarifier quelques points ici.

  • Il est vrai que les développeurs de services Web novices se lanceront facilement dans les services Web asmx. Visual Studio fait tout le travail pour eux et crée facilement un projet Hello World.
  • Mais si vous pouvez apprendre le WCF (ce qui, bien sûr, ne prendra pas beaucoup de temps), vous pouvez voir que le WCF est également assez simple et vous pouvez y aller facilement.
  • Il est important de se rappeler que ces complexités dites dans WCF sont en fait attribuées aux belles fonctionnalités qu'il apporte. Il existe des adresses, des liaisons, des contrats et des points de terminaison, des services et des clients tous mentionnés dans le fichier de configuration. La beauté est que votre logique commerciale est séparée et maintenue en toute sécurité. Demain, si vous devez changer la liaison de basicHttpBinding à netTcpBinding, vous pouvez facilement créer une liaison dans un fichier de configuration et l'utiliser. Ainsi, tous les changements liés aux clients, aux canaux de communication, aux liaisons, etc. doivent être effectués dans la configuration en laissant la logique métier en sécurité et intacte, ce qui est vraiment logique.
  • Les «services Web» WCF font partie d'un éventail beaucoup plus large de communications à distance activées via WCF. Vous obtiendrez un degré beaucoup plus élevé de flexibilité et de portabilité en faisant des choses dans WCF que via ASMX traditionnel, car WCF est conçu, à partir de zéro, pour résumer toutes les différentes infrastructures de programmation distribuée offertes par Microsoft. Un point de terminaison dans WCF peut être communiqué avec aussi facilement sur SOAP / XML que sur TCP / binaire et changer ce support est simplement un mod de fichier de configuration. En théorie, cela réduit la quantité de nouveau code nécessaire lors du portage ou de la modification des besoins, des cibles, etc. de l'entreprise.
  • Les services Web ne sont accessibles que via HTTP et fonctionnent dans un environnement sans état, où WCF est flexible car ses services peuvent être hébergés dans différents types d'applications. Vous pouvez héberger vos services WCF dans la console, les services Windows, IIS et WAS, qui sont encore différentes façons de créer de nouveaux projets dans Visual Studio.
  • ASMX est plus ancien que WCF, et tout ce que ASMX peut faire peut également WCF (et plus). Fondamentalement, vous pouvez voir WCF comme essayant de regrouper logiquement toutes les différentes façons de faire communiquer deux applications dans le monde de Microsoft; ASMX n'était qu'une de ces nombreuses façons et est donc maintenant regroupé sous le parapluie de capacités WCF.
  • Vous aimerez toujours utiliser Visual Studio pour NET 4.0 ou 4.5 car cela vous simplifie la vie lors de la création de services WCF.
  • La principale différence est que les services Web utilisent XmlSerializer. Mais WCF utilise DataContractSerializer, dont les performances sont meilleures par rapport à XmlSerializer. C'est pourquoi WCF fonctionne bien mieux que les autres homologues des technologies de communication de .NET comme asmx, .NET remoting, etc.

Sans oublier que j'étais l'un de ces gars qui aimaient les services asmx plus que WCF, mais à cette époque, je ne connaissais pas bien les services WCF et ses capacités. J'avais peur des configurations WCF. Mais j'ai osé et essayé d'écrire mes propres services WCF, et quand j'ai appris plus sur WCF, maintenant je n'ai plus aucune inhibition à propos de WCF et je les recommande à tout le monde. Bon codage !!!

Sagnik Majumder
la source