2010-09-20 20 views
6

J'ai eu mon service WCF fonctionnant avec HTTPS, Il montre l'Infopage, mais l'URL ci-dessous "Pour tester ce service, ... avec la syntaxe suivante:" est:URL incorrecte dans le lien hypertexte WSDL lors de l'utilisation de WCF (https)

svcutil.exe https://servername.group.service.com/MyService.svc?wsdl (adresse complète du serveur)

au lieu de l'URL correcte https://my.service.com/MyService.svc?wsdl (attribué HostHeader), comment puis-je pour montrer la bonne URL (<URL of the Service> + ?wsdl)?

<services> 
    <service name="MyService" behaviorConfiguration="MyServer.MyServiceBehavior"> 
    <endpoint binding="basicHttpBinding" bindingConfiguration="basicHttpBigStrings" contract="IMyService"> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="MyService.MyServiceBehavior"> 
     <serviceCredentials> 
     <serviceCertificate findValue="my.service.com" x509FindType="FindBySubjectName"/> 
     </serviceCredentials> 
     <serviceMetadata httpsGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<bindings> 
    <basicHttpBinding> 
    <binding name="basicHttpBigStrings"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None"/> 
     </security> 
     <readerQuotas maxStringContentLength="1048576" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

Je l'ai déjà essayé de changer <serviceMetadata httpsGetEnabled="true"/> en <serviceMetadata httpsGetEnabled="true" httpsGetUrl="https://my.service.com/MyService.svc"/> mais il dit simplement: « Un enregistrement existe déjà pour URI https://my.service.com/MyService.svc »

+0

J'ai le même problème. Avez-vous trouvé une solution à ce sujet? – Turrau

+0

Non, pas si loin, désolé ... – Hinek

+0

Hébergez-vous ce service dans IIS? Si tel est le cas, IIS détermine cette URL, pas WCF. –

Répondre

4

Vous avez indiqué que vous avez défini tête d'hôte. Est-il défini pour SSL ou seulement Http. Rappelez-vous, l'interface utilisateur IIS n'a pas de champs pour définir l'en-tête de l'hôte pour SSL. vous devez utiliser des scripts d'administration (IIS 6.0) ou netsh.exe pour une version ultérieure d'IIS.

+1

L'en-tête de l'hôte est uniquement défini pour HTTP, avez-vous des liens pour définir l'en-tête de l'hôte pour SSL? – Hinek

+1

Comment est-ce une solution au problème? –

+0

Amit - merci !! Après des heures et des heures de recherche de solutions, cela a fait l'affaire. Nous avons supprimé les en-têtes d'hôte pour http et https afin de prendre en charge la configuration de l'équilibreur de charge. Les rajouter a résolu le problème. En passant, nous avons également vu une page vierge avec une erreur de 400 requêtes incorrectes lorsque vous essayez de demander le WSDL via HTTPS (pour toute personne rencontrant le même problème). – adamisnt

0

Vous pouvez trouver quelques informations sur ce sujet à la StackOverflow suivante link - la première chose que je essayerait (ils donnent plusieurs scénarios différents qui sont un peu plus impliqués) serait de définir l'URI d'écoute sur la définition du point de terminaison de service. Lorsque j'ai eu des problèmes pour obtenir l'adresse WSDL directement dans mon application, j'ai pu la régler pour la corriger. Dans ce cas, j'essayais simplement de réparer le schéma (nous étions derrière un BIGIP et il terminait SSL donc le schéma devait être https même si WCF du côté du serveur pensait qu'il obtenait http).

<endpoint address="https://www.sslloadbalancer.com" binding="someBinding" contract="IMyServiceInterface" listenUri="http://www.servicehost.com" ... /> 

Je pense que cela va fixer le WSDL pour vous

+0

Le service est hébergé dans IIS, IIS détermine l'URL, je ne peux pas définir l'adresse de point de terminaison manuellement dans la configuration. – Turrau

+0

Mon exemple provient de services hébergés IIS - vous savez où sur IIS vous déployez votre service, alors pourquoi ne pouvez-vous pas définir l'adresse de point de terminaison dans la configuration? – HintonBR