32 votes

WCF n'utilise pas le nom de l'ordinateur au lieu du nom de domaine lors de l'affichage de MyService.svc? Wsdl

Mon serice WCF semble utiliser le nom d'ordinateur au lieu du nom de domaine. Lorsque je consulte le lien MyService.svc?wsdl , il affiche le nom de mon ordinateur.

Où dois-je ajouter mon nom de domaine dans le web.config? Adresse, adresse de base ou identité du point de terminaison?

Remarque: j'utilise SSL, il doit donc être https://www.example.com/myservice.svc

27voto

nick_alot Points 1742

WCF 4.0 a résolu ce problème dans certains cas avec une nouvelle option de configuration qui utilise les en-têtes de demande:

     <behaviors>
        <serviceBehaviors>
            <behavior name="AutoVaultUploadBehavior">
                <useRequestHeadersForMetadataAddress>
                    <defaultPorts>
                        <add scheme="https" port="443" />
                    </defaultPorts>
                </useRequestHeadersForMetadataAddress>
 

9voto

blowdart Points 28735

Pour IIS7 vous n'avez pas l'ajouter sur le web.config, mais pour le fichier de configuration IIS.

Tout d'abord modifier les liaisons pour votre site web afin que le protocole HTTP spécifie un nom d'hôte si vous ne l'avez pas déjà cela permettra d'assurer qu'il obtient le nom correct en vertu de l'HTTP.

Accédez à C:\Windows\System32\inetsrv\config et ouvrir applicationHost.config

Recherchez les sites de l'article. Vous verrez quelque chose comme ce qui suit

<sites>
  <site name="Default Web Site" id="1">
    <application path="/">
        <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
    </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:80:puck" />
      <binding protocol="net.tcp" bindingInformation="808:*" />
      <binding protocol="net.pipe" bindingInformation="*" />
      <binding protocol="net.msmq" bindingInformation="localhost" />
      <binding protocol="msmq.formatname" bindingInformation="localhost" />
      <binding protocol="http" bindingInformation="*:80:puck.idunno.org" />
      <binding protocol="http" bindingInformation="*:80:localhost" />
      <binding protocol="https" bindingInformation="*:443:" />
    </bindings>
  </site>
  ....
</sites>

Vous pouvez voir que les liaisons pour le protocole http spécifier un en-tête d'hôte, mais https ne fonctionne pas. Lorsque vous êtes à la navigation sur le web, vous ne pouvez pas utiliser les en-têtes ordinateur hôte via le protocole HTTPS, mais WCF utilise encore lors de la génération du WSDL - s'il ne peut pas en trouver un, il en sera de retour pour le nom de la machine.

Donc tout ce que vous devez faire est de modifier la liaison HTTPS comme

      <binding protocol="https" bindingInformation="*:443:puck" />

en ajoutant le bon nom de domaine complet à la fin de la liaison de l'information. Réinitialiser IIS et WCF recevez dès maintenant.

Le IIS6 solution a déjà été posté par darin

8voto

Pedro Dias Points 11

Comme indiqué dans ce lien, WCF utilise le nom de l'ordinateur au lieu de l'adresse IP et ne peut pas être résolu

Cela a résolu mon problème, peut-être parce que j'ai plusieurs sites Web sur le même hôte, et c'est très simple.

 < serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
 

</ system.serviceModel>

4voto

User0106 Points 76

Pour résoudre ce problème Configurez l'attribut httpGetEnabled et httpsGetEnabled dans le fichier web.config

 <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
 

3voto

Aleksander Belov Points 486

Nous utilisons WCFExtras pour changer le nom de l'hôte.

WCFExtras est une petite bibliothèque open source qui vous permettra d'écrire ce qui suit pour changer le nom d'hôte:

 <behaviors>
  <endpointBehaviors>
    <behavior name="xxx">
      <wsdlExtensions location="http://some-hostname-visible-from-outside/path-to-a-service/service.svc" singleFile="True" />
    </behavior>
  ...
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X