Comment puis-je exposer un service WCF afin qu'un client utilisant des liaisons wsHttp et un autre client utilisant des liaisons netTcp puissent utiliser le service?Service WCF avec deux types de liaison pour deux clients différents
Répondre
En bref, vous pouvez le faire simplement grâce à la configuration!
Have you seen this tutorial? Do check this out.
Son un excellent tutoriel avec des images d'écran de l'ensemble du processus de base de la configuration d'un service d'échantillonnage avec plusieurs points de terminaison en utilisant le Microsoft Service Configuration Editor.
Tout est une question de configuration - lorsque vous définissez votre service, vous allez simplement définir et définir deux points de terminaison - un pour wsHttpBinding
, l'autre pour netTcpBinding
. C'est aussi simple que ça!
<system.serviceModel>
<services>
<service name="YourNamespace.MyService">
<endpoint
address="ws"
binding="wsHttpBinding"
contract="YourNamespace.IMyService" />
<endpoint
address="net.tcp://localhost:8787/MyService"
binding="netTcpBinding"
contract="YourNamespace.IMyService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8282/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
Maintenant vous avez votre service exposant deux points d'extrémité:
- une aide de l'
wsHttpBinding
àhttp://localhost:8282/ws
- un en utilisant le
netTcpBinding
àtcp://localhost:8787/MyService
Les deux extrémités sont pour le même service , pour le même contrat de service, par exemple offrent les mêmes fonctionnalités et méthodes de service.
Chaque point de terminaison de service WCF doit définir l'ABC de la WCF:
- [A] DRESSE - où le service peut être atteint/appelé?
- [B] inding - comment appeler le service (protocole, paramètres, sécurité, etc.)?
- [C] ontract - qu'est-ce que le service offre à cette adresse, quelles méthodes sont exposées?
Vous pourriez également avoir spécifié une adresse de base pour nettcp, juste pour des raisons de cohérence. –
@Johann Blais: oui, vous pouvez certainement le faire - c'est entièrement à vous. Je voulais juste montrer à la fois la méthode - avec l'adresse de base (pour http), et sans spécifier une adresse explicite et complète dans la balise
J'ai essayé ceci mais quand j'accède à http: // localhost: 8282/ws j'obtiens un HTTP 404 - erreur non trouvée de dossier. Y a-t-il autre chose nécessaire? –
Le lien est mort ... – Vaccano
Yup. Lien mort. Une réponse complète est toujours meilleure, même si ti dit les mêmes choses dans le lien. –
@Vaccano/Coral - Mise à jour du lien. Bien que je serais généralement d'accord avec les commentaires de Coral concernant la publication du contenu, dans ce cas, je trouve son un peu trop long et avec beaucoup de captures d'écran étape par étape - donc je ne pense pas qu'il y ait vraiment une façon succincte manière. D'où le lien. – InSane