2009-08-07 4 views
1

Lorsque je publie mon service WCF ASP.NET, le fichier WSDL utilise le nom de la machine au lieu du nom de domaine. Comment éviter cela?Dans les services WCF hébergés IIS, comment désactiver la traduction d'adresses?

Exemple:

<wsdl:import namespace="http://ListenerService" 
    location="http://MACHINE_NAME/ListenerService/service.svc?wsdl=wsdl0"/> 
<soap:address location="http://MACHINE_NAME/ListenerService/service.svc"/> 

Quand je veux vraiment:

<wsdl:import namespace="http://ListenerService" 
    location="http://MYDOMAIN.COM/ListenerService/service.svc?wsdl=wsdl0"/> 
<soap:address location="http://MYDOMAIN.COM/ListenerService/service.svc"/> 

Répondre

3

Vous ne pouvez pas empêcher que cela se produise - au moins pas seulement avec un commutateur de configuration ou quelque chose comme ça.

Vous pourriez être en mesure de résoudre votre problème en regardant cet article ici - un chapitre décrivant le problème exact que vous rencontrez et une solution possible de le:

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

Et un autre homme intelligent qui a couru dans quelques problèmes avec le même problème:

http://www.leastprivilege.com/HostHeadersSSLAndWCFMetadata.aspx

Marc

3

Juste pour que les futurs visiteurs découvrent la bonne réponse à cette question: le commentateur ci-dessus n'est pas correct. Vous pouvez résoudre ce problème en modifiant plusieurs options dans le fichier web.config. Voici comment le mien est mis en place:

<system.serviceModel> 
    <services> 
     <service name="ourWebService.ourService" behaviorConfiguration="ourWebService.ourServiceBehavior"> 
    <host> 
      <baseAddresses> 
       <add baseAddress="http://oursitename.com:83/ourService.svc" /> 
      </baseAddresses> 
     </host> 
     <endpoint bindingNamespace="http://oursitename.com:83/ourService.svc" 
     address="" binding="basicHttpBinding" contract="ourIWebService.IourService" 
     bindingConfiguration="customBinding2"> 
      <identity> 
      <dns value="oursitename.com" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <bindings> 
    <basicHttpBinding> 
     <binding name="customBinding2" > 
      <readerQuotas maxArrayLength="2147483" maxStringContentLength="2147483647" maxNameTableCharCount="2147483647" /> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="ourWebService.ourServiceBehavior" httpGetUrl="http://oursitename.com:83/ourService.svc"> 
      <serviceMetadata httpGetEnabled="true" httpGetUrl="http://oursitename.com:83/ourService.svc/mex"/> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

Les bits importants sont les urls, obtenir l'identité et les baseAddresses.

Questions connexes