WCF élève-t-il la barre ou simplement le niveau de complexité? [fermé]


84

Je comprends la valeur du modèle service / hôte / client en trois parties offert par WCF. Mais est-ce juste moi ou semble-t-il que WCF a pris quelque chose d'assez direct et simple (le modèle ASMX) et en a fait un gâchis?

Existe-t-il une alternative à l'utilisation de la ligne de commande de SvcUtil pour générer le proxy? Avec les services ASMX, un faisceau de test était automatiquement fourni; existe-t-il une bonne alternative aujourd'hui avec WCF?

J'apprécie que les éléments WS * soient plus étroitement intégrés à WCF et j'espère y trouver des avantages pour WCF, mais bon sang, sinon je suis perplexe.

En outre, l'état des livres disponibles pour WCF est au mieux épouvantable. Juval Lowy, un superbe auteur, a écrit un bon livre de référence O'Reilly "Programming WCF Services" mais il ne fait pas grand-chose (pour moi en tout cas) pour apprendre maintenant à utiliser WCF. Le précurseur de ce livre (et un peu mieux organisé, mais pas beaucoup, sous forme de tutoriel) est Learning WCF de Michele Leroux Bustamante. Il a de bons endroits mais il est désuet et son site Web correspondant a disparu.

Avez-vous de bonnes références d'apprentissage WCF en plus de continuer à Google le bejebus des choses?


3
Si vous recherchez un bon client de test pour les services WCF. Ne cherchez pas plus loin que msdn.microsoft.com/en-us/library/bb552364.aspx
Strelok

Réponses:


61

Ok, on y va. Tout d'abord, le livre de Michele Leroux Bustamante a été mis à jour pour VS2008. Le site Web du livre n'a pas disparu. Il est en place pour le moment et contient des tonnes d'informations intéressantes sur la WCF. Sur ce site Web, elle fournit un code mis à jour compatible avec VS2008 pour tous les exemples de son livre. Si vous commandez sur Amazon, vous obtiendrez la réimpression qui est mise à jour.

WCF ne remplace pas seulement ASMX. Bien sûr, il peut (et le fait très bien) remplacer ASMX, mais le véritable avantage est qu'il permet à vos services d'être auto-hébergés. La plupart des fonctionnalités de WSE ont été intégrées dès le départ. Le cadre est hautement configurable et la capacité de servir plusieurs points de terminaison sur plusieurs protocoles est incroyable, IMO.

Bien que vous puissiez toujours générer des classes proxy à partir de l'option "Ajouter une référence de service", ce n'est pas nécessaire. Tout ce que vous avez vraiment à faire est de copier votre interface ServiceContract et d'indiquer à votre code où trouver le point de terminaison du service, et c'est tout. Vous pouvez appeler des méthodes du service avec très peu de code. En utilisant cette méthode, vous avez un contrôle total sur l'implémentation. Quelle que soit la méthode que vous choisissez pour générer une classe proxy, Michele montre les deux et les utilise dans son excellente série de webémissions sur le sujet.

Michele a des tonnes de matériel formidable, et je vous recommande de consulter son (ses) site (s) Web. Voici quelques liens qui m'ont été extrêmement utiles alors que j'apprenais WCF. J'espère que vous vous rendrez compte à quel point WCF est vraiment fort et à quel point il est facile à mettre en œuvre. La courbe d'apprentissage est un peu raide, mais les récompenses pour votre investissement en temps en valent la peine:

Je vous recommande de regarder au moins 1 des webémissions de Michele. Elle est une présentatrice très efficace et elle est évidemment incroyablement compétente en matière de WCF. Elle fait un excellent travail de démystification du fonctionnement interne de WCF à partir de zéro.


3
Excellentes ressources. Je n'irais pas jusqu'à dire que rp dénigrait la WCF ou les auteurs. Moi aussi, je me suis senti un peu dépassé en essayant de regarder WCF après avoir passé tant de temps dans ASMX. Je sais que c'est mieux et je veux en faire l'expérience, mais il est difficile de trouver un point d'entrée comme vous pourriez le faire avec ASMX.
Chris Stewart

15

Merci pour les liens. Curieux, savez-vous ce qui est arrivé à bouddhiste? Il semble avoir disparu de la surface de la terre. Le nouveau blog qu'il mentionne sur blogs.thinktecture.com/buddhike n'existe pas (plus). C'est comme s'il s'était débarrassé de cette bobine mortelle. (Quels rêves peuvent venir?) Merci.
Jim Raden


14

J'ai du mal à voir quand je devrais ou utiliserais WCF. Pourquoi? Parce que je place la productivité et la simplicité en tête de ma liste. Pourquoi le modèle ASMX a-t-il été si réussi, parce qu'il a fonctionné et que vous le faites fonctionner rapidement. Et avec VS 2005 et .NET 2.0 wsdl.exe crachait des services assez sympas et conformes.

Dans la vraie vie, vous devriez avoir très peu de protocoles de communication dans votre architecture. Cela reste simple et maintenable. Si vous avez besoin d'accéder à des systèmes hérités, écrivez-leur des adaptateurs spécifiques afin qu'ils puissent jouer dans le beau et beau monde SOA.


WCF vise à être un cadre unique pour tous ces protocoles. Il fait SOAP, REST et avec le SDK de l'adaptateur WSCF, il effectue également ces connexions «système hérité», le tout dans le modèle WCF.
Cheeso

3
Cela dépend de la façon dont vous mesurez la «productivité». Je préférerais qu'un développeur prenne 2 à 3 jours pour comprendre cela maintenant, pour les avantages disent dans 6 mois. WCF remplace plus que de simples services Web.
Christian Payne

1
Je suis d'accord à 100%. Si vous voulez juste des services Web et que vous devez expédier rapidement (qui ne le fait pas?), C'est ASMX tout le chemin bébé! WCF est un énorme marteau - exagération totale si tout ce que vous voulez, ce sont des services Web de base. Ce n'est pas parce que c'est la nouvelle chose brillante que vous devriez supposer que c'est mieux, pour tous les scénarios, tout le temps. Et juste parce que WCF est difficile à comprendre, ne fait pas de vous une personne intelligente pour le choisir. Plus de pouvoir pour ceux qui ont le courage de refuser de sauter dans le train de la WCF!
saille

13

WCF est beaucoup plus puissant que ASMX et il l'étend de plusieurs manières. ASMX est limité à HTTP uniquement, alors que WCF peut utiliser plusieurs protocoles pour sa communication (d'accord, HTTP est toujours la façon dont la plupart des gens l'utiliseront, au moins pour les services qui doivent être interopérables). WCF est également plus facile à étendre. Au moins, il est possible de l'étendre de manière à ce qu'ASMX ne puisse pas être étendu. "Facile" peut l'étirer. =)

La fonctionnalité ajoutée offerte par WCF l'emporte de loin sur la complexité qu'elle ajoute, à mon avis. J'ai aussi le sentiment que le modèle de programmation est plus simple. Les DataContracts sont bien plus agréables que d'avoir à sérialiser à l'aide de la sérialisation XML avec des propriétés publiques pour tout, par exemple. C'est aussi de nature beaucoup plus déclarative, ce qui est également bien.


6

Attendez .... avez-vous déjà utilisé .NET Remoting, car c'est la vraie chose qu'il remplace. .NET Remoting est assez compliqué en soi. Je trouve WCF plus facile et mieux aménagé.


4

Je ne le vois pas assez souvent mentionné, mais vous pouvez toujours implémenter des services assez simples avec WCF, très similaires aux services ASMX. Par exemple:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService
{
    [OperationContract]
    public string HelloWorld()
    {
        return "Hello World";
    }

}

Vous devez toujours enregistrer le point final dans votre web.config, mais ce n'est pas si grave.

L'élimination de la verbosité des contrats de données, de service et d'opération séparés contribue grandement à rendre WCF plus gérable pour moi.


AspNetCompatibilityRequirements est un mal nécessaire si de nombreux développeurs veulent passer de leurs services ASMX qui fonctionnent actuellement très bien.
Dave Ward

@dan pourquoi pas AspNetCompatibilityRequirements ?
PreguntonCojoneroCabrón

@DaveWard AspNetCompatibilityRequirements est un mal nécessaire ?
PreguntonCojoneroCabrón

4

VS2008 inclut l'élément de menu contextuel "Ajouter une référence de service" qui créera le proxy pour vous dans les coulisses.

Comme mentionné précédemment, WCF n'est pas uniquement destiné à remplacer les types de services Web ASMX, mais à fournir une méthodologie cohérente, sécurisée et évolutive pour tous les services interopérables, que ce soit via HTTP, tcp, canaux nommés ou transports MSMQ.

J'avouerai que j'ai d'autres problèmes avec WCF (par exemple la réécriture des signatures de méthode lors de l'exposition d'un service sur basicHTTP - voir ici , mais dans l'ensemble, je pense que c'est une amélioration définitive


3

Si vous utilisez VS2008 et créez un projet WCF, vous obtenez automatiquement un faisceau de test lorsque vous appuyez sur exécuter / déboguer et vous pouvez ajouter une référence sans avoir à utiliser svcutil.


2

Mes premières pensées sur la WCF étaient exactement les mêmes! Voici quelques solutions:

  1. Programmez votre propre couche proxy / client en utilisant des génériques (voir les classes ClientBase , Binding). J'ai trouvé cela facile à mettre en œuvre, mais difficile à perfectionner.
  2. Utiliser une implémentation tierce de 1 ( SoftwareIsHardwork est mon préféré actuel)

2

WCF remplace tous les services Web antérieurs technologies de de Microsoft. Il fait également beaucoup plus que ce qui est traditionnellement considéré comme des «services Web».

Les «services Web» WCF font partie d'un spectre beaucoup plus large de communications à distance activées via WCF. Vous obtiendrez un degré beaucoup plus élevé de flexibilité et de portabilité en faisant les choses dans WCF qu'avec ASMX traditionnel, car WCF est conçu, dès le départ, pour résumer toutes les différentes infrastructures de programmation distribuées offertes par Microsoft. Un point de terminaison dans WCF peut être communiqué aussi facilement via SOAP / XML que via TCP / binaire et changer ce support est simplement un fichier de configuration mod. 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.

ASMX is older than WCF, and anything ASMX can do so can WCF (and more). Fondamentalement, vous pouvez voir WCF comme essayant de regrouper logiquement toutes les différentes manières de faire communiquer deux applications dans le monde de Microsoft; ASMX n'était que l'un de ces nombreux moyens et est donc maintenant regroupé sous le parapluie de capacités WCF.

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. Les scénarios courants pour l'hébergement de services WCF sont IIS, WAS, auto-hébergement, service Windows géré.

La principale différence est que les services Web utilisent XmlSerializer. Mais WCF utilise DataContractSerializer qui est meilleur en performances par rapport à XmlSerializer.

Dans quels scénarios WCF doit-il être utilisé

  • Un service sécurisé pour traiter les transactions commerciales. Un service qui
  • fournit des données actuelles à d'autres, comme un rapport de trafic ou autre
  • service de surveillance. Un service de chat qui permet à deux personnes de
  • communiquer ou échanger des données en temps réel. Une application de tableau de bord
  • qui interroge un ou plusieurs services pour les données et les présente dans un
  • présentation. Exposer un workflow implémenté à l'aide de Windows Workflow
  • Foundation en tant que service WCF. Une application Silverlight pour interroger un
  • service pour les derniers flux de données.

Caractéristiques de WCF

  • Orientation du service
  • Interopérabilité
  • Modèles de messages multiples
  • Métadonnées du service
  • Contrats de données
  • Sécurité
  • Transports et encodages multiples
  • Messages fiables et mis en file d'attente
  • Messages durables
  • Transactions
  • Prise en charge AJAX et REST
  • Extensibilité

source: principale source de texte


Maintenant, utilisez WCF ou REST? ou WebAPI? ou MicroService?
PreguntonCojoneroCabrón

1

MSDN? Je fais généralement assez bien avec la référence de la bibliothèque elle-même, et je m'attends généralement à y trouver des articles précieux.


1

En termes de ce qu'il offre, je pense que la réponse est la compatibilité. Les services ASMX étaient plutôt Microsofty. Pour ne pas dire qu'ils n'ont pas essayé d'être compatibles avec d'autres consommateurs; mais le modèle n'a pas été conçu pour s'adapter à d'autres pages Web ASP.NET et à certains autres consommateurs Microsoft personnalisés. Alors que WCF, en raison de son architecture, permet à votre service d'avoir des points de terminaison basés sur des standards très ouverts, par exemple REST, JSON, etc. en plus du SOAP habituel. D'autres personnes auront probablement beaucoup plus de facilité à consommer votre service WCF que votre service ASMX.

(Tout cela est essentiellement déduit de la lecture comparative de MSDN, donc quelqu'un qui en sait plus devrait se sentir libre de me corriger.)


Je n'ai eu aucun problème avec les services ASMX multiplateformes - XML ​​y parvient très bien. Je comprends que WCF = Remoting + ASMX + MSMQ + WSE. Mon boeuf est que MS devrait utiliser une petite "amélioration progressive" pour rendre WCF plus facilement accessible et ma question est de savoir comment! Merci, rp
rp.

L'interopérabilité ASMX était très bonne, bien que l'effort ait augmenté lorsque WS-Security était impliqué.
Cheeso

1

WCF ne doit pas être considéré comme un remplacement d'ASMX. À en juger par la façon dont il est positionné et comment il est utilisé en interne par Microsoft, il s'agit vraiment d'une pièce d'architecture fondamentale qui est utilisée pour tout type de communication transfrontalière.


oui ... et en tant que cadre de communication fondamental, il devrait remplacer les services Web orientés ASMX et ASP.NET. Non?
Cheeso

1

Je crois que WCF fait vraiment progresser l'implémentation des services Web ASMX de plusieurs manières. Tout d'abord, il fournit un très beau modèle d'objet en couches qui aide à masquer la complexité intrinsèque des applications distribuées. Deuxièmement, vous pouvez avoir plus que des modèles de messagerie de demande-réexécution, y compris des notifications asynchrones du serveur au client (impossible avec HTTP pur), et troisièmement, extraire le protocole de transport sous-jacent de la messagerie XML et ainsi prendre en charge avec élégance HTTP, HTTPS, TCP et autres. La rétrocompatibilité avec les services Web de "1ère génération" est également un plus. WCF utilise la norme XML comme format de représentation interne. Cela pourrait être perçu comme un avantage ou un inconvénient, en particulier avec la popularité croissante des «alternatives sans gras à XML» comme JSON.


1

Les choses difficiles que je trouve avec WCF sont la gestion des configurations pour les clients et les serveurs, et le dépannage des exceptions d'état défectueuses pas si gentilles.

Ce serait bien si quelqu'un avait des raccourcis ou des conseils pour ceux-ci.


1

Je trouve que c'est une douleur; en ce que j'ai .NET aux deux extrémités, j'ai les mêmes dlls «contract» chargées aux deux extrémités, etc.

Par défaut, WCF autorise uniquement 1 ou 2 clients à se connecter à un service jusqu'à ce que vous modifiiez beaucoup de configuration. Changer la configuration à partir du code n'est pas facile, expédier beaucoup de fichiers comfig n'est pas une option, car il est trop difficile de fusionner nos modifications avec les modifications qu'un client peut avoir apportées au moment d'une mise à niveau (nous ne voulons pas non plus de clients jouer avec les paramètres WCF!)

La communication à distance .NET avait tendance à fonctionner la plupart du temps.

Je pense essayer de faire semblant que les communications basées sur des objets .NET vers .NET équivaut à envoyer un peu de texte (xml) à un système inconnu, était un pas trop loin.

(Les quelques fois où nous avons utilisé WCF pour parler à un système Java, nous avons constaté que le XSD que le système java a donné ne correspondait pas au XML qu'il voulait de toute façon, nous avons donc dû coder à la main un grand nombre de mappages XML.)


Je pense que les gens sont un peu hors de propos lorsqu'ils disent que WCF est un remplacement pour la communication à distance. La communication à distance est toujours une bonne option lorsque vous souhaitez effectuer de véritables appels .Net à .Net basés sur des objets, et avoir beaucoup de contrôle sur la façon dont les choses sont configurées aux deux extrémités. WCF, d'autre part, est orienté vers la publication de services que tout le monde peut utiliser, comme il le souhaite.
Tim Lovell-Smith

@Tim, Microsoft dit maintenant utiliser WCF pour tout et qu'il s'agit d'un remplacement pour Remoting. Remoting semble être l'enfant oublié du monde .net.
Ian Ringrose
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.