Service WCF exposant 2 points de terminaison sur 2 différents contrats de service
J'ai un service WCF qui je suis en train de configurer de sorte qu'il expose 2 points de terminaison, se référant à différentes fonctionnalités, sous différentes Url.
Ce que je veux, est Service1, d'exposer les méthodes A, B, C, et Service2, d'exposer les méthodes D, E.
Je veux être en mesure de naviguer à la fois localhost/WebServiceName/Service1/Service.svc et localhost/WebServiceName/Service2/Service.svc.
D'autres applications de référencement localhost/WebServiceName/Service1/Service.svc devriez voir l'interface contenant les méthodes A, B et C. Ils ne doivent pas voir quoi que ce soit concernant Service2 interface. Et pour Service2 de même.
Pour l'instant j'ai défini deux interfaces dans mon service WCF, I_Service1 et I_Service2.
J'ai ajouté deux points de terminaison dans mon web.config comme suit:
<endpoint address="http://localhost/WebServiceName/Service1/" binding="wsHttpBinding" contract="WebServiceName.I_Service1" bindingConfiguration="Binding1" />
<endpoint address="http://localhost/WebServiceName/Service2/" binding="wsHttpBinding" contract="WebServiceName.I_Service2" bindingConfiguration="Binding2" />
La suggestion de l'utilisation de l'adresse complète dans la enpoint vient d'ici: Plusieurs points de terminaison sous IIS
Mais encore, je ne peux pas naviguer localhost/WebServiceName/Service1/Service.svc. - Je recevoir:
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.
Je peux parcourir avec succès localhost/WebServiceName/Service.svc et le wsdl inclut des méthodes A, B, C, D, E. Mais ce doit être mal dans le comportement que je veux.
Il y a une chose que j'ai manqué?
Mise à JOUR: Suite à cet article, http://allen-conway-dotnet.blogspot.ro/2011/09/exposing-multiple-binding-types-for.html j'ai créé deux différentes contrat de services pour ces points de terminaison. Mais actuellement, je suis en voir seulement Service1 quand je le parcourir. Service2 apparemment n'existe pas (erreur HTTP 404 questions liées à paraître).
La configuration ressemble à:
<services>
<service behaviorConfiguration="WebServiceName.ServiceBehavior1" name="WebServiceName.Service1">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="Binding1"
contract="WebServiceName.I_Service1" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/WebServiceName/Service1/Service.svc" />
</baseAddresses>
</host>
</service>
<service behaviorConfiguration="WebServiceName.ServiceBehavior2" name="WebServiceName.Service2">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="Binding1"
contract="WebServiceName.I_Service2" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/WebServiceName/Service2/Service.svc" />
</baseAddresses>
</host>
</service>
</services>
OriginalL'auteur Coral Doe | 2012-12-06
Vous devez vous connecter pour publier un commentaire.
La façon dont je l'ai toujours fait, c'est comme suit: un seul "adresse de base" pour le service et de spécifier les adresses des points de terminaison aussi différents le texte à ajouter sur cette adresse de base...
Si dans votre cas, l'adresse de base pourrait être
localhost/WebServiceName
et l'adresse de point de terminaison pour le point de terminaison 1 peut êtreService1/Service.svc
. De même pour le point de terminaison de 2, il peut êtreService2/Service.svc
. Je vois que vous avez suivi les conseils de mettre l'adresse complète de l'adresse de point de terminaison, mais tout ce que je peux dire, c'est que je l'ai fait de cette façon avec succès.Sauf si vous avez donné à l'un de vos points de terminaison à l'adresse "FirstEndpointName/Service.svc" je ne m'attends pas l'adresse que vous avez l'habitude de travailler. Souvenez-vous de terminaison des noms et adresses des points de terminaison sont des choses différentes.
L'ultime adresse devient: localhost:8733/MyBaseAddress/Service.svc/FirstEndpointAddress et localhost:8733/MyBaseAddress/Service.svc/SecondEndpointAddress Dans le code de client: var svcClient = new ServiceReference1.ServiceClient("SecondEndpointName");
OriginalL'auteur Martin
Pour le moment ma solution à ce problème est l'intégration de deux .svc fichiers dans mon webservice pour séparer les deux interfaces.
Telle est, je localhost/WebServiceName/Service1.svc et localhost/WebServiceName/Service2.svc.
Avec la configuration des ordinateurs d'extrémité
Cette solution n'est pas nécessairement le meilleur (si un client veut vraiment, on peut trouver que ce service expose les 2 interfaces différentes, mais je peux les fixer avec les informations d'identification différentes/jetons). Mais pour le moment je vais aller avec elle.
OriginalL'auteur Coral Doe
J'ai essayé de faire la chose que vous avez décrit. Tout cela réussir. S'il vous plaît ne pas être en colère si certaines étapes sont évidents pour vous. Donc:
Par défaut, j'ai eu l'adresse suivante.config de l'Application Web du projet:
Vous pouvez essayer de reconstruire WCF projet et de mettre à Jour WebReferences.
OriginalL'auteur Piotr Czarnecki