web-dev-qa-db-fra.com

https avec 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 pas être activé en raison d'une exception lors de la compilation. Le message d'exception est: Impossible de trouver une adresse de base qui correspond au schéma https pour le point de terminaison avec la liaison BasicHttpBinding. Adresse de base enregistrée les schémas sont [http] .. "

EDIT: Donc, si je change address="" à address="https:// ..." alors j'obtiens cette erreur à la place:

" Erreur: le protocole 'https' n'est pas pris en charge ..... Le ChannelDispatcher à ' https: //.../Annotation.svc ' avec contrat (s) '" " L'annotation "'ne peut pas ouvrir son IChannelListener."

Voici ce que mon Web.Config ressemble à:

<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>
41
Mike Blandford

Il s'est avéré que mon problème était que j'utilisais un équilibreur de charge pour gérer le SSL, qui l'a ensuite envoyé via http au serveur réel, qui s'est ensuite plaint.

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 passant par https à l'équilibreur de charge. L'équilibreur de charge a ensuite modifié l'adresse du point de terminaison en http et pour pointer vers le serveur réel vers lequel il allait. Donc, sur 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]" ... />
20
Mike Blandford

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

Ancien: binding = "mexHttpBinding"

Nouveau: binding = "mexHttpsBinding"

extrait 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>
28
MacGyver

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

J'ai eu cette erreur en essayant d'utiliser un fichier de configuration HTTPS sur ma boîte locale qui n'a pas ce certificat. J'essayais de faire des tests locaux - en convertissant certaines des liaisons de HTTPS en HTTP. J'ai pensé qu'il serait plus facile de faire cela que d'essayer d'installer un certificat auto-signé pour les tests locaux.

Il s'est avéré que j'obtenais cette erreur car je n'avais pas SSL activé sur mon local IIS même si je n'avais pas l'intention de l'utiliser réellement).

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

8
Simon_Weaver

Je pense que vous essayez de configurer votre service d'une manière similaire à la configuration suivante. Il y a plus d'informations ici: Spécifiez un service avec deux points de terminaison 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 les deux points de terminaison HTTP et HTTPS au même service. Cela va un peu à l'encontre de l'objectif du HTTPS. J'espère que cela t'aides!

<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>
3
Sixto Saez

Dans mon cas, je configure le mode de sécurité sur "TransportCredentialOnly" au lieu de "Transport" dans la liaison. Le changer a résolu le problème

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

J'utilisais webHttpBinding et j'ai oublié de dicter le mode de sécurité de "Transport" sur la configuration de liaison qui a provoqué l'erreur:

  <webHttpBinding>
    <binding name="MyWCFServiceEndpoint">
      <security mode="Transport" />
    </binding>
  </webHttpBinding>

L'ajout de cela dans la configuration a résolu le problème.

0
atconway

Regardez votre adresse de base et votre adresse de point de terminaison (ne pouvez pas la voir dans votre exemple de code). vous avez probablement manqué une colonne ou une autre faute de frappe, par exemple https // au lieu de https: //

0
Sebastian Castaldi