.NET 4 WCF Point de terminaison dans les métadonnées générées (WSDL) Points au nœud plutôt qu'à l'hôte virtuel hébergé sur charge équilibrée (NLBS) IIS6

StackOverflow https://stackoverflow.com/questions/3630156

Question

C'est vraiment simple. J'ai un service WCF (rien d'extraordinaire, juste un nouveau projet-> Application de service WCF), qui fonctionne très bien dans Visual Studio. Lorsque je le déploie dans un environnement IIS6 en cluster, cela fonctionne principalement. Je peux envoyer une demande et obtenir une réponse.

Cependant, les métadonnées générées se réfèrent systématiquement à un nœud particulier dans le cluster et non au nom virtuel des clusters.

https://clustername.test.com/WcfService1/Service1.svc

montre ce qui suit dans HTML:

Service1 Service

You have created a service.

To test this service, you will need to create a client 
and use it to call the service. You can do this using 
the svcutil.exe tool from the command line with the 
following syntax:

svcutil.exe https://node1.test.com/DocrRetention/Service1.svc?wsdl

qui affiche le nom du nœud (node1.test.com) plutôt que le nom du cluster.

https://clustername.test.com/WcfService1/Service1.svc?wsdl 

montre le XML suivant:

...
    <wsdl:types>
        <xsd:schema targetNamespace="http://tempuri.org/Imports">
            <xsd:import schemaLocation="https://node1.test.com/WcfService1/Service1.svc?xsd=xsd0" namespace="http://tempuri.org/"/>
            <xsd:import schemaLocation="https://node1.test.com/WcfService1/Service1.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
            <xsd:import schemaLocation="https://node1.test.com/WcfService1/Service1.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/WcfService1"/>
        </xsd:schema>
    </wsdl:types>
...
    <wsdl:service name="Service1">
        <wsdl:port name="BasicHttpBinding_IService1" binding="tns:BasicHttpBinding_IService1">
            <soap:address location="https://node1.test.com/WcfService1/Service1.svc"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

Encore une fois, affichant le nom du nœud plutôt que l'hôte virtuel.

Alors, à quoi ressemble mon web.config? Il est petit donc je vais montrer le tout.

<?xml version="1.0"?>
<configuration>

  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding>
          <security mode="Transport"/>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="WcfService1.Service1">
        <endpoint binding="basicHttpBinding" contract="WcfService1.IService1"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>
Était-ce utile?

La solution

Comme je sais que l'URL dans WSDL est par défaut dérivé du serveur d'hébergement. Certains KB pour .NET 3.5 SP1 ont introduit de nouveaux comportements qui peuvent utiliser l'URL de l'en-tête hôte. Ce comportement a également été inclus dans .NET 4.0. Vérifier: userequesthedersformetadataaccess. À la fin de ça article Vous avez une description de ce comportement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top