web-dev-qa-db-fra.com

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 à la place du nom de domaine. Lorsque je visualise le lien MyService.svc?wsdl, il affiche le nom de mon ordinateur.

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

Note: J'utilise SSL donc il faut que ce soit https://www.example.com/myservice.svc

32
Blankman

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

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

Pour IIS7, vous ne l'ajoutez pas à web.config, mais au fichier de configuration IIS. 

Commencez par modifier les liaisons de votre site Web afin que le protocole HTTP spécifie un nom d'hôte si vous ne l'avez pas encore fait - cela garantira qu'il obtiendra le nom correct sous HTTP.

Accédez à C:\Windows\System32\inetsrv\config et ouvrez le fichier applicationHost.config.

Recherchez la section des sites. 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écifient un en-tête d'hôte, mais pas https. Lorsque vous naviguez sur le Web, vous ne pouvez pas utiliser les en-têtes d'hôte sur HTTPS, mais WCF l'utilise toujours lors de la génération du fichier WSDL. S'il ne parvient pas à en trouver un, il revient au nom de l'ordinateur.

Donc, tout ce que vous avez à faire est d’éditer la liaison HTTPS comme

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

ajouter le nom de domaine complet correct à la fin des informations de liaison. Réinitialisez IIS et WCF devraient l’obtenir maintenant.

La solution IIS6 a déjà été publiée par darin

9
blowdart

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 dans le même hôte, et c'est très simple.

< serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

</ system.serviceModel>

8
Pedro Dias

Pour résoudre ce problème Configurez les attributs httpGetEnabled et httpsGetEnabled dans le fichier web.config.

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

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>
  ...
3
Aleksander Belov

en ajoutant simplement <useRequestHeadersForMetadataAddress></useRequestHeadersForMetadataAddress> au problème résolu. Il semble que WCF 4.0 prenne soin des en-têtes en ajoutant ceci J'utilisais SSL pour accéder au service WCF. 

2
ABN

J'ai eu ce problème avec mon serveur de production. J'ai trouvé divers articles sur les multiples en-têtes de l'hôte avec IIS et le problème WCF, mais si vous utilisez SSL, vous ne pouvez pas ajouter d'en-tête d'hôte aux identités du site Web dans l'interface utilisateur IIS, vous ne pouvez les ajouter qu'aux identités HTTP normales:

enter image description here

Cependant, vous pouvez ajouter des en-têtes d'hôtes SSL via un script d'invite de commande, ce qui a résolu le problème pour moi:

cscript.exe adsutil.vbs set /w3svc/<site identifier>/SecureBindings ":443:<Host header>"

Pour plus d'informations à ce sujet, voir ce lien: http://blumenthalit.net/blog/Lists/Posts/Post.aspx?ID=14

1
David Masters

J'ai ajouté des solutions ici, http://knowledgebaseworld.blogspot.com/2010/06/domain-name-replaced-with-machine-name.html . cela devrait fonctionner pour vous tous car cela fonctionne bien avec moi sur le local, la mise en scène et la production sans faire obligation à IIS

1
IBhadelia
1
Rebecca

Aucune de ces solutions ne m'a été utile. J'ai pu résoudre ce problème avec une très simple Service Factory personnalisée.

Installation d'un service WCF sur un site d'hébergement partagé, revisité

1
Chris Marisic

Voici une réponse, même s’il s’agit d’une publication ancienne. Sous Comportement du service -> ServiceMetaData, ajoutez l’URL du service.

Veuillez noter que si vous n’ajoutez pas myService, une autre erreur sera renvoyée.

1
Khurram Tanwir

Merci à Kanasz Robert. Étapes qui ont résolu mon problème - 1.Produisez le fichier wsdl dans le navigateur et enregistrez-le dans un fichier (en appuyant sur .svc? Wsdl à partir du navigateur), en tant que .wsdl

  1. Produisez les fichiers xsd en sélectionnant l'URL dans wsdl (xsd = xsd0, etc.), puis enregistrez-le dans un fichier à partir du navigateur, enregistrez sous .wsdl.

  2. remplacez toutes les références de nom d’ordinateur de wsdl par un nom de domaine (ou adresse ip), modifiez les références xsd et sauvegardez ET remplacez toutes les références de nom d’ordinateur des fichiers xsd par un nom de domaine (ou adresse ip) . Assurez-vous de nommer le fichier xsd avec Extension .xsd (nom0.xsd, nom1.xsd, nom2.xsd)

  3. copiez les fichiers wsdl et xsd dans le répertoire virtuel et ajoutez-les à votre fichier web.config:

<behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceMetadata httpGetEnabled="true" externalMetadataLocation="http://IPorDomainName/MyServices/FileTransferService.wsdl"  />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

0
subho

Cet article l'a résolu pour moi. J'avais besoin d'associer mon nom de domaine à mon adresse IP et à mon site Web dans IIS.

http://www.codemeit.com/wcf/wcf-wsdl-xsdimport-schemalocations-link-to-local-machine-name-not-domain-name-while-hosted-in-iis.html

0
Shane