41 votes

https avec l'erreur WCF : "Impossible de trouver l'adresse de base qui correspond au schéma https"

Je vais sur https://mywebsite/MyApp/Myservice.svc et j'obtiens l'erreur suivante :

(Le lien fonctionne si j'utilise http:// )

" Le service '/MyApp/MyService.svc' ne peut être activé en raison d'une exception lors de la compilation. Le message d'exception est le suivant : Impossible de trouver une adresse de base correspondant au schéma https pour le point de terminaison avec le binding BasicHttpBinding. Les schémas d'adresses de base enregistrés sont [http] "

Edit : Si je remplace address="" par address="https:// ...", j'obtiens cette erreur : " Erreur : Le protocole 'https' n'est pas supporté..... Le ChannelDispatcher à 'https://.../Annotation.svc' avec le(s) contrat(s) '"Annotation"' n'est pas en mesure d'ouvrir son IChannelListener. "

Voici à quoi ressemble mon Web.Config :

<services>
      <service behaviorConfiguration="AnnotationWCF.AnnotationBehavior"
              name="AnnotationWCF.Annotation">
              <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Annotation"
                      contract="AnnotationWCF.Annotation" />
              <endpoint address="" 
                  binding="basicHttpBinding" bindingConfiguration="SecureTransport"
                  contract="AnnotationWCF.Annotation" />
              <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>

<bindings>
<basicHttpBinding>
    <binding name="BasicHttpBinding_Annotation" maxBufferSize="2147483647"
            maxReceivedMessageSize="2147483647">
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647"
            maxNameTableCharCount="2147483647" />
    </binding>
    <binding name="SecureTransport" maxBufferSize="2147483647"
            maxReceivedMessageSize="2147483647">
        <security mode="Transport">
        <transport clientCredentialType="None"/>
        </security>
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647"
            maxNameTableCharCount="2147483647" />
    </binding>
</basicHttpBinding>

28voto

MacGyver Points 4808

J'ai eu exactement le même problème. Sauf que ma solution était d'ajouter un "s" à la valeur de liaison.

Vieux : binding="mexHttpBinding"

Nouveau : binding="mexHttpsBinding"

un extrait de web.config :

<services>
    <service behaviorConfiguration="ServiceBehavior" name="LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService">
        <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="webBinding" 
            contract="LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService" />
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
    </service>

20voto

Mike Blandford Points 2050

Il s'est avéré que mon problème était que j'utilisais un équilibreur de charge pour gérer le SSL, qui l'envoyait ensuite par http au serveur réel, qui se plaignait alors.

La description d'un correctif est ici : http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/

Edit : J'ai résolu mon problème, qui était légèrement différent, après avoir parlé au support microsoft.

Mon application Silverlight avait son adresse de point de terminaison dans le code allant sur https à l'équilibreur de charge. L'équilibreur de charge a ensuite changé l'adresse du point de terminaison en http et pour pointer vers le serveur réel auquel il se rendait. Ainsi, dans la configuration web de chaque serveur, j'ai ajouté un listenUri pour le point de terminaison qui était http au lieu de https.

<endpoint address="" listenUri="http://[LOAD_BALANCER_ADDRESS]" ... />

8voto

Simon_Weaver Points 31141

Assurez-vous que SSL est activé pour votre serveur !

J'ai obtenu cette erreur en essayant d'utiliser un fichier de configuration HTTPS sur ma boîte locale qui ne possède pas ce certificat. J'essayais de faire des tests locaux, en convertissant certains liens de HTTPS en HTTP. Je pensais qu'il serait plus facile de faire cela que d'essayer d'installer un certificat auto-signé pour les tests locaux.

Il s'avère que j'ai eu cette erreur parce que Je n'avais pas activé le SSL sur mon IIS local, même si je n'avais pas l'intention de l'utiliser.

Il y avait quelque chose dans la configuration pour HTTPS. La création d'un certificat auto-signé dans IIS7 a permis à HTTP de fonctionner :-)

3voto

Sixto Saez Points 9582

Je pense que vous essayez de configurer votre service d'une manière similaire à la configuration suivante. Vous trouverez plus d'informations ici : Spécifier un service avec deux points d'extrémité utilisant des valeurs de liaison différentes . De plus, à part pour le développement, ce n'est probablement pas une bonne idée d'avoir des points de terminaison HTTP et HTTPS pour le même service. Cela va à l'encontre de l'objectif de HTTPS. J'espère que cela vous aidera !

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="shortTimeout"
    </endpoint>
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="Secure"
     </endpoint>
</service>
<bindings>
    <basicHttpBinding 
        name="shortTimeout"
        timeout="00:00:00:01" 
     />
     <basicHttpBinding 
        name="Secure">
        <Security mode="Transport" />
     </basicHttpBinding>
</bindings>

1voto

Dans mon cas, je règle le mode de sécurité sur "TransportCredentialOnly" au lieu de "Transport" dans le binding. Ce changement a permis de résoudre le problème.

<bindings>
  <webHttpBinding>
    <binding name="webHttpSecure">
      <security mode="Transport">
        <transport clientCredentialType="Windows" ></transport>
      </security>
      </binding>
  </webHttpBinding>
</bindings>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X