2009-07-29 9 views
1

J'ai un service WCF hébergé dans IIS sur un serveur Web public, et doit être détectable.Résolution DNS pour la découverte de service WCF

Il est, lorsque je parcours http://myserver.mydomain/myfolder/myService.svc, que la page affichée affiche le nom réel de la machine au lieu de l'URL fournie, par ex. http://myRealServer.myRealDomain/myFolder/myService.svc?wsdl en tant que lien pour voir le WSDL. De même, si je me connecte au service via un outil tel que soapUI, les liens vers les sorties "wsdl0" supplémentaires etc. sont fournis avec les détails du serveur réel au lieu de l'URL que je fournis (rendant ainsi le service indécouvrable) .

Ma question: Comment changer cette URL pour qu'elle s'affiche correctement?

Remarque: Mon environnement de développement utilise IIS6 sur Win2003, l'environnement en direct est IIS7 sur Win2008, le problème se produit dans les deux environnements.

+0

Semble être un doublon de http://stackoverflow.com/questions/1078894/generated-wcf-proxy-configuration-uses-servers-local-name/ –

+0

@Partario: J'ai essayé la solution d'en-tête d'hôte à partir de ce qui précède et cela n'a fait aucune différence - je vais essayer encore ceci en incluant les changements à l'élément . –

Répondre

0

Ce que vous pourriez faire est de fournir un WSDL statique que vous pouvez modifier et modifier selon vos goûts, avant de le rendre disponible.

Dans ce cas, le fichier WSDL statique est fourni "tel quel" au lieu d'interroger le service en cours d'exécution pour créer le fichier WSDL "à la volée". Cela peut aussi être un coup de pouce de performance.

Pour ce faire, vous devez indiquer le nom et l'emplacement du fichier WSDL comme ceci:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="StaticWsdl"> 
      <serviceMetadata httpGetEnabled="true" 
       externalMetadataLocation="http://localhost:8000/YourService/YourWSDL.wsdl"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

Maintenant, chaque fois qu'une demande de WSDL ou métadonnées arrive, ce WSDL statique sera fourni à la place. Ceci vous permet également de créer un seul fichier WSDL contenant toutes les informations nécessaires, y compris le schéma XML pour les données transmises. Plus besoin d'importer ou de référencer des fragments WSDL ou XSD externes.

Marc

+0

@marc_s: n'est-ce pas le problème normal de l'en-tête de l'hôte IIS? En l'absence d'un en-tête d'hôte pour le nom extérieur, il utilise le nom de la machine? –

+0

@John: pas sûr - je ne suis pas familier avec ce problème particulier (puisque je n'héberge jamais dans IIS moi-même) –

+0

@marc_s & @John: Il ne semble pas être le problème de l'en-tête de l'hôte; J'ai essayé d'ajouter ceci et cela ne fait aucune différence. –

1

ne suis pas sûr IIS7 (bien que je suis sûr qu'il doit être possible), mais avec IIS6 vous pouvez configurer un en-tête d'hôte pour un site Web. Mettre ceci à "myserver.mydomain" pourrait trier les choses. Voir Generated WCF proxy configuration uses server's local name.

+0

@Partario: J'ai essayé d'ajouter un en-tête d'hôte au site, mais il continue d'afficher le nom réel de la machine plutôt que la valeur de l'en-tête de l'hôte fournie. Merci quand même. –

Questions connexes