2008-12-12 7 views
41

je vais à https://mywebsite/MyApp/Myservice.svc et obtenir l'erreur suivante:https avec l'erreur WCF: « Impossible de trouver l'adresse de base qui correspond à régime https »

(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 noeud final avec liaison BasicHttpBinding. ] .. "

EDIT: Donc, si je change address=""-address="https:// ..." alors je reçois cette erreur à la place:

« Erreur: Le protocole « https » est pas pris en charge ..... Le ChannelDispatcher à « https://.../Annotation.svc » avec le contrat (s) « » Annotation "'est incapable d'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> 

Répondre

20

Il est apparu que mon problème était que j'utilisais un équilibreur de charge pour gérer le SSL, puis envoyé sur http au serveur réel, qui se plaint alors.

Description d'une solution est ici: http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/

Edit: je fixe mon problème, ce qui était un peu différent, après avoir parlé à l'appui de Microsoft.

Mon application silverlight avait son adresse de point de terminaison dans le code passant par https vers l'équilibreur de charge. L'équilibreur de charge a ensuite modifié l'adresse du point de terminaison en http et pointe vers le serveur réel sur lequel il était destiné. Donc, sur la configuration web de chaque serveur j'ai ajouté un listenUri pour le point final qui était http au lieu de https

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

Le lien -> http://blog.hackedbrain.com/archive/2006/09/26/5281.aspx ne fonctionne pas. – Lamps

+1

Utilisez link-> http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/ – meetjaydeep

3

Je pense que vous essayez de configurer votre service d'une manière similaire à la configuration suivante Il y a plus d'informations ici : Specify a Service with Two Endpoints Using Different Binding Values En outre, autre que pour le développement, il n'est probablement pas une bonne idée d'avoir les deux points de terminaison HTTPS HTTP & pour le même service, ce qui va à l'encontre du but de HTTPS. lps!

<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> 
+2

qui ressemble à une faute de frappe dans le MSDN. Le second basicHttpBinding ne devrait-il pas être fermé APRÈS le mode de sécurité = "Transport"? également intéressant que l'adresse sécurisée commence par http, pas https. –

8

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. Je pensais que ce serait plus facile 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 IIS local même si je n'avais pas l'intention de l'utiliser réellement.

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

+2

J'ai trouvé que c'était assez pour vous assurer que IIS (6.0) écoutait sur le port 443 (cliquez avec le bouton droit sur Site Web par défaut, Propriétés, port SSL, redémarrer). Je ne suis pas allé jusqu'à créer un certificat. –

+1

J'ai trouvé le commentaire ci-dessus de @ rory-macleod très utile. Lorsque vous exécutez localement, assurez-vous d'activer SSL en cliquant avec le bouton droit sur le projet dans Visual Studio, puis en définissant "SSL activé" sur "true" dans le panneau Propriétés du projet. Ensuite, vous serez invité à installer le certificat auto-signé. – Jeff

+0

@Jeff merci c'était tout! j'avais essayé de faire fonctionner cela pendant quelques jours maintenant – symbiont

25

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

ancienne: liaison = "mexHttpBinding"

Nouveau: liaison = "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> 
0

Regardez votre base adresse et votre adresse de point de terminaison (ne peut pas le 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

j'utilisais webHttpBinding et oublié de dicate le mode de sécurité de « Transport » sur la configuration de liaison qui a causé l'erreur:

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

L'ajout de cette configuration fixe la problème.

1

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

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