L'erreur est tout à fait clair - vous Utilisez HTTP, vous avez activé HttpGetEnabled sur votre comportement ServiceMetadata, mais vous n'avez pas fourni d'adresse de base dans votre configuration.
Dans IIS, les adresses de base ne sont ni nécessaires ni utilisées, car l'emplacement du fichier * .svc définit votre adresse de service. Lorsque vous vous hébergez, vous pouvez et devez utiliser des adresses de base.
Changer votre config pour ressembler à ceci:
<system.serviceModel>
<services>
<service name="YourService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/YourService" />
</baseAddresses>
</host>
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
..... (your own other endpoints) ...........
</service>
</services>
</system.serviceModel>
Maintenant, le « HttpGetEnabled » a une adresse de base http://localhost.8080/YourService
aller pour obtenir les métadonnées.
Ou si vous ne l'aimez pas, encore une fois, le message d'erreur est tout à fait clair sur votre solution: définir une URL absolue pour le HttpGetUrl dans votre ServiceMetadata:
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata
httpGetEnabled="true"
httpGetUrl="http://localhost:8282/YourService/mex" />
</behavior>
</serviceBehaviors>
Les clients peuvent obtenir vos métadonnées à partir vos points d'extrémité "mex", soit à une URL fixe définie comme dans ce deuxième exemple, soit ils iront à l'adresse de base du service pour les métadonnées (s'il y en a une). Si vous venez d'IIS et que vous n'avez rien adapté, vous n'aurez pas d'adresse de base, ni d'URL explicite et absolue pour votre point de terminaison d'échange de métadonnées, c'est pourquoi vous obtenez l'erreur que vous voyez .
Marc
quel est votre code pour créer le proxy? – Dani
productsServiceHost = nouveau ServiceHost (typeof (Products.ProductsService)); productsServiceHost.Open(); stop.IsEnabled = true; start.IsEnabled = false; status.Text = "Service en cours ..."; – Attilah