Référence Web et référence de service

110

Je viens de frapper un énorme mur de briques avec Paypal. J'avais créé un projet C # régulier pour créer des classes wrapper en utilisant leur WSDL.

Si vous créez un projet non Web, la seule option que vous obtenez pour ajouter un wsdl est une référence de service Web. Et cela crée un peu le même ensemble de classes proxy qu'une référence Web le ferait, mais pas vraiment ... cela ajoute plus que même les gars de PayPal ne sont pas au courant.

J'ai donc cherché pendant tout ce temps la bonne interface dans cette liste de classes proxy à utiliser comme service (SoapBinding) et PayPalAPIAASoapBindingje n'y étais pas, j'ai continué à dire à notre point de contact PayPal.

Je n'ai pu voir que les 2 interfaces suivantes qui m'ont semblé ce que j'avais besoin d'utiliser car je n'ai pas vu de PayPalAPIAASoapBindingce que vous POUVEZ voir dans une référence de service basée sur une référence Web:

PayPalAPIAAInterfaceClient
PayPalAPIInterfaceClient 

J'ai donc compris, oh, j'avais probablement créé une référence de service par rapport à une référence Web, quelle référence Web est une option dans un projet Web. Mais je ne veux pas que ma référence de service soit étroitement liée à mon projet Web. C'est pourquoi j'ai créé le projet C #.

Alors, qu'est-ce qu'une référence de service par rapport à une référence Web? Et comment suis-je censé séparer cela en un autre projet si Service Reference va me lancer une boucle et me donner un ensemble d'interfaces différentes de celles d'une référence Web?

Aussi, pour rendre les choses encore PLUS déroutantes, VS 2008 a un projet d'application de service Web.

Alors qu'est-ce que j'utilise? Nous utilisons le framework .NET 3.5 et nous ne sommes pas prêts à passer à WCF . Puis-je toujours utiliser la nouvelle référence de service même si je n'utilise pas WCF ou quoi? Si vous utilisez .NET 3.5 et pas encore WCF et que vous souhaitez toujours effectuer des services Web de base, suivez-vous toujours la route de référence de service et n'utilisez tout simplement pas le framework WCF? Cela signifie-t-il qu'il peut encore être utilisé comme une référence Web .NET 2.0, juste que vous allez obtenir une génération entièrement différente du WSDL?

PositiveGuy
la source
2
8 ans plus tard et toujours d'actualité.
Mike Devenney

Réponses:

213

L'ajout de référence Web est l'ancienne technologie de services Web ASP.NET (ASMX) obsolète (utilisant uniquement XmlSerializer pour vos affaires) - si vous faites cela, vous obtenez un client ASMX pour un service Web ASMX. Vous pouvez le faire dans n'importe quel projet (application Web, site Web, application console, Winforms - vous le nommez).

Ajouter une référence de service est la nouvelle façon de le faire, en ajoutant une référence de service WCF, ce qui vous donne un modèle de service beaucoup plus avancé et beaucoup plus flexible que de simples éléments ASMX.

Puisque vous n'êtes pas prêt à passer à WCF, vous pouvez également ajouter l'ancienne référence Web, si vous le devez vraiment: lorsque vous faites un "Ajouter une référence de service", dans la boîte de dialogue qui apparaît, cliquez sur le bouton [Avancé ] dans le coin gauche du bouton:

texte alternatif

et dans la boîte de dialogue suivante qui apparaît, sélectionnez le bouton [Ajouter une référence Web] en bas.

marc_s
la source
6
Quelle stupidité pour MS de cacher cela dans une boîte de dialogue WCF! Cela n'a même pas de sens avec le placement ici
PositiveGuy
9
@coffeeaddict: eh bien, je pense que MS essaie de vous inciter subtilement à utiliser WCF par défaut - et seulement ASMX à l'ancienne si vous êtes vraiment déterminé :-)
marc_s
27
Si vous utilisez Alt + PrtScn, vous pouvez prendre un instantané de la fenêtre active actuelle, de cette façon vous n'aurez pas à recadrer manuellement ce que vous voulez voir: o)
Ernest
Cela nécessitera-t-il également .NET 2.0 sur l'ordinateur? Ou .NET 4.0 sera-t-il capable de gérer la technologie "Web Reference" basée sur .NET 2.0? Je veux savoir parce que je déploie un webservice SOAP en tant que "Web Reference" dans une application .NET 4.0.
Utilisateur d'ordinateur
1
@sparkyShorts: oui.
marc_s
9

Si je comprends bien votre question:

Pour ajouter une référence de service Web .net 2.0 au lieu d'une référence de service WCF, cliquez avec le bouton droit sur votre projet et cliquez sur «Ajouter une référence de service».

Cliquez ensuite sur "Avancé .." en bas à gauche de la boîte de dialogue.

Cliquez ensuite sur "Ajouter une référence Web .." en bas à gauche de la boîte de dialogue suivante.

Vous pouvez maintenant ajouter une référence Web SOAP régulière comme vous le recherchez.

élan
la source
Cela nécessitera-t-il également .NET 2.0 sur l'ordinateur? Ou .NET 4.0 sera-t-il capable de gérer la technologie "Web Reference" basée sur .NET 2.0? Je veux savoir parce que je déploie un webservice SOAP en tant que "Web Reference" dans une application .NET 4.0.
Utilisateur d'ordinateur
4

L'ajout d'une référence de service vous permet de créer un client WCF, qui peut être utilisé pour parler à un service Web standard à condition d'utiliser la liaison appropriée. L'ajout d'une référence Web vous permettra de créer uniquement une référence de service Web (c'est-à-dire SOAP).

Si vous êtes absolument certain que vous n'êtes pas prêt pour WCF (vous ne savez vraiment pas pourquoi), vous devez créer une référence de service Web régulière.

Otávio Décio
la source
3
Parce que WCF n'est PAS facile pour les débutants. Et de plus, mon patron ne me laisse pas passer, c'est la vraie raison. C'est du code et exécutez ici. Quand vous avez cette situation, je ne peux rien y faire.
PositiveGuy
7
@coffeeaddict Je pense que vous et votre patron êtes mal informés. Les deux types de références créeront une classe qui fournit des méthodes pour appeler les opérations de service. En quoi est-il pertinent que la classe créée par une référence de «service» hérite d'une classe de base qui se trouve être dans une bibliothèque que Microsoft considère comme faisant partie d'une technologie qu'il appelle WCF?
Daniel Pratt
1
Cela nécessitera-t-il également .NET 2.0 sur l'ordinateur? Ou .NET 4.0 sera-t-il capable de gérer la technologie "Web Reference" basée sur .NET 2.0? Je veux savoir parce que je déploie un webservice SOAP en tant que "Web Reference" dans une application .NET 4.0.
Utilisateur d'ordinateur
3

En fin de compte, les deux font la même chose. Il existe quelques différences dans le code: les services Web n'ajoutent pas d'espace de noms racine du projet, mais Service Reference ajoute des classes de service à l'espace de noms du projet. La ServiceSoapClientclasse reçoit un nom différent, ce qui n'est pas important. En travaillant avec TFS, je préfère utiliser Service Reference car il fonctionne mieux avec le contrôle de code source. Les deux fonctionnent avec les protocoles SOAP.

Je trouve préférable d'utiliser le Service Reference car il est neuf et sera donc mieux entretenu.

user3628475
la source