Un service, plusieurs points de terminaison, plusieurs liaisons sur WCF. Pourquoi ne puis-je pas atteindre mes points de terminaison?
J'ai un service WCF exécuter par IIS. Je voudrais créer deux clients différents (WPF et WP7), qui utilisent le même service. Le client WPF déjà avec un point de terminaison à l'aide de wsHttpBinding
et https
. Malheureusement WP7 ne pas faire wsHttpBinding
seulement BasicHttpBinding
. J'ai donc pensé que je voudrais exposer les différents points de terminaison pour les deux, afin qu'ils puissent bénéficier du même service, mais avec différentes fixations et ce n'est pas...
Voici donc mon Web.config IIS:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="TransportSecurity">
<reliableSession enabled="true" />
<security mode="TransportWithMessageCredential" >
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
<basicHttpBinding>
<binding name="BasicTransportSecurity">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="SmartCook2.Server.ISmartCookServiceBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
<service behaviorConfiguration="SmartCook2.Server.ISmartCookServiceBehavior"
name="SmartCook2.Server.SmartCookService">
<endpoint address="WS" binding="wsHttpBinding" bindingConfiguration="TransportSecurity"
name="WS" contract="SmartCook2.Server.ISmartCookService" />
<endpoint address="Basic" binding="basicHttpBinding" bindingConfiguration="BasicTransportSecurity"
name="Basic" contract="SmartCook2.Server.ISmartCookService" />
<endpoint address="mex" binding="mexHttpsBinding" name="mex"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<connectionStrings>
<add name="SmartCookDBEntities" connectionString="metadata=res://*/SmartCookContext.csdl|res://*/SmartCookContext.ssdl|res://*/SmartCookContext.msl;provider=System.Data.SqlClient;provider connection string="data source=RENDERBETYAR;initial catalog=SmartCookDB;integrated security=True;pooling=False;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Maintenant, si j'ai bien compris les points de terminaison doivent être accessibles à l'adresse suivante:
https://localhost/IISHostedSmartCook/SmartCookService.svc/Basic
https://localhost/IISHostedSmartCook/SmartCookService.svc/WS
https://localhost/IISHostedSmartCook/SmartCookService.svc/mex
Si j'ai vérifier dans mon navigateur, je ne reçois rien. Il n'y a pas d'exception, mais pas de contenu. À l'aide de l'adresse de base (jusqu'à la .svc partie), je reçois le service par défaut de la page et je peux accéder au fichier wsdl, et il est valide. Il a les points de terminaison, mon du service des méthodes, etc correctement dans la mesure où je peux dire.
Si j'essaie d'ajouter le ServiceReference à mon WP7 projet Visual Studio, je ne peux voir que mon service en vertu de l'adresse de base (point de terminaison spécifique des adresses de retour pour rien). Si je l'ajoute, les classes sont générées sur la droite, seulement je ne peux pas appeler mon service méthodes et j'obtiens le message d'erreur "Il n'y a pas de point de terminaison à l'écoute à cette adresse". (C'est également le cas si j'utilise le service client du constructeur nécessitant le point de terminaison du nom.)
Ce que je fais mal?
source d'informationauteur Tenshiko | 2011-10-24
Vous devez vous connecter pour publier un commentaire.
Vérifier ici pour une explication détaillée.
Ce que vous aurez besoin de spécifier l'adresse comme dans votre
endpoints
:Tous votre configuration est correcte et si vous inspectez votre wsdl SOAP:adresse de l'attribut aurait les emplacements spécifiés par vous je.e:
Lorsque vous ajoutez une référence dans vos projets, vous avez juste besoin d'utiliser le point de terminaison de laquelle vous souhaitez savoir si vous souhaitez utiliser basicHttpBinding ensuite utiliser que le point de terminaison qui a son adresse
Lorsque vous accédez à ces adresses dans internet explorer, vous ne voudriez pas voir quelque chose qui est tout à fait correct. Pour le rendre plus sensibile remplacer localhost par le nom de votre ordinateur, qui devrait être visible sur le réseau, vous êtes en sorte que les services soient accessibles à travers le réseau.
Aussi essayer de construire un .NET client d'invoquer le service et assurez-vous que vos services fonctionnent parfaitement.
Je crois que vous devrez peut-être changer votre point de fin d'adresses endroits relatifs:
et
Mex adresse est un cas spécial, et donc ne devrait pas avoir besoin d'être changé.
Voir la documentation MSDN La spécification d'une Adresse de point de Terminaison pour plus de détails.
Répondu ici:
La WCF: Plusieurs configurations de liaison pour un seul service
Fondamentalement, vous ne pouvez pas avoir de différentes reliures à la même URI comme mentionné Ici
Vous pouvez avoir différentes configurations de liaison dans la même reliure.