Service WCF retourne 404 sur https mais pas http

Je suis la migration d'un service existant à partir de l'adresse HTTP (Dev/UAT), HTTPS (de Production), et je vais avoir des problèmes avec la configuration. Ici, c'est le système.serviceModel section de mon site web.config:

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
    <services>
      <service name="MyService">
        <endpoint name="MyEndpoint" address="" binding="wsHttpBinding"
            bindingConfiguration="secureBinding" contract="IMyService" />
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="secureBinding">
          <security mode="Transport"></security>
        </binding>
      </wsHttpBinding>
    </bindings>
</system.serviceModel>

J'ai essayé en utilisant à la fois basicHttpBinding et wsHttpBinding, avec les mêmes résultats:

  • Je peux appeler le service de mon client SOAP en utilisant http://server.domain.com/MyService.svc
  • Je peux frapper le service à partir d'un navigateur à l'aide de https://server.domain.com/MyService.svc
  • Je ne peux pas appeler le service de mon client SOAP en utilisant https://server.domain.com/MyService.svc - l'appel toujours des erreurs avec 404: not found.

Mon site en https est certifié à l'aide d'un certificat émis par une autorité de certification sur le domaine de l'entreprise, et j'ai vérifié que j'ai que CA certificat installé dans Trusted Root Certification Authorities sur le système à partir de laquelle je suis en train de faire les appels.

Pertinentes du code de client:

Service service = new Service();
service.Url = "http://server.domain.com/MyService.svc";
//service.Url = "https://server.domain.com/MyService.svc";
service.WebMethodCall();

MODIFIER

Voici la demande des parties du WSDL:

<wsdl:types/>
<wsdl:portType name="IMyService"/>
<wsdl:binding name="BasicHttpBinding_IMyService" type="tns:IMyService">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
</wsdl:binding>
<wsdl:service name="MyService">
    <wsdl:port name="BasicHttpBinding_IMyService" 
        binding="tns:BasicHttpBinding_IMyService">
        <soap:address location="http://server.domain.com/MyService.svc"/>
    </wsdl:port>
</wsdl:service>

MODIFIER

Plus d'informations:

Lorsque je change la serviceMetadata élément pour avoir httpGetEnabled="false" et httpsGetEnabled="true" l' .svc page montre moi le lien suivant:

https://boxname.domain.com/MyService.svc?wsdl

plutôt que de l'attendre

https://server.domain.com/MyService.svc?wsdl
Si vous générez un fichier WSDL pour votre service en production ne comprennent port HTTPS?
Je vais ajouter une note sur le WSDL dans un edit
C'est normal, car votre serviceMetadata permet de httpGet et pas httpsGet. Aussi, vous ne pouvez pas obtenir une référence de service parce que vous n'avez pas exposer mex point de terminaison. L'important est le contenu de WSDL lorsque vous y accédez via HTTP - en particulier la dernière partie décrivant le service et les ports.

OriginalL'auteur arootbeer | 2010-10-06