2011-02-07 6 views
1

Aide s'il vous plaît !!Wcf Http et Https

J'ai eu la configuration suivante fonctionne parfaitement: -

  1. WCF Service des bibliothèques hébergé dans le site Web sur IIS local 7

  2. application Silverlight sur un site Web sur IIS local 7 en utilisant les services ci-dessus

La solution que je suis en train d'écrire est pour intranet et non Internet, mais on m'a dit par mes patrons qu'il a besoin d'être plus Https. J'utilise l'authentification Windows.

Voici un morceau du fichier de configuration pour l'un des points de terminaison de service (modifié pour supprimer les informations de l'entreprise, etc.): -

<services> 
    <service behaviorConfiguration="stdHttpBehavior" name="WcfServiceLibrary.StaticDataService"> 
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="windowsHttpBinding" 
     name="StaticDataService" contract="WcfServiceLibrary.ServiceContracts.IStaticDataService" /> 
    <endpoint address="mex" binding="mexHttpBinding" name="" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost/WcfServiceLibrary/StaticDataService/" /> 
     </baseAddresses> 
    </host> 
    </service> 

<behaviors> 
    <serviceBehaviors> 
    <behavior name="stdHttpBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

Pour expérimenter avec Https j'ai créé un «certificat auto-signé». J'ai ensuite ajouté https aux liaisons du site Web par défaut et modifié les deux sites Web pour exiger SSL et également modifié les URI relvant dans les fichiers de configuration. J'ai réussi à faire fonctionner cela, mais maintenant je veux revenir à la norme Http et terminer le projet dans ce mode, car il était plus facile de travailler avec. J'ai changé tous les paramètres (et j'ai vérifié ces derniers avec beaucoup d'attention).

Maintenant je cette erreur si je tente de Downoad la définition de service dans le projet Silverlight: -

« Impossible de trouver une adresse de base qui correspond schéma https pour le point final avec une liaison BasicHttpBinding. Les schémas d'adresse de base enregistrés sont [http]. '

Si je remets le certificat et la liaison dans IIS. La définition du service semble télécharger OK, cependant il fait référence à un URI https et par conséquent aucun des appels de service réels ne fonctionnent car ce sont des adresses http!

J'ai essayé d'ajouter un nouveau site web pour héberger le service mais j'ai eu les mêmes erreurs.

J'ai essayé de résoudre ce problème au cours des derniers jours, mais je ne trouve pas de réponse. Il semble qu'il y ait une référence cachée quelque part et non dans mon projet car cela a continué avec un nouveau site web ajouté à IIS.

Répondre

2

Pour utiliser SSL via le protocole HTTP dans Basic liaison HTTP, vous devez changer votre point final à utiliser au niveau Transport Sécurité. Dans votre cas, vous pouvez également indiquer le type d'informations d'identification client:

<bindings> 
    <basicHttpBinding> 
    <binding name="windowsHttpBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Windows" /> 
     <message /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
+0

Merci. C'était le problème mais à l'envers. J'ai changé le mode de sécurité en Transport quand j'ai configuré pour Https mais je ne l'ai pas changé à TransportWithCredentialOnly parce que je pensais que le transport était autorisé pour Http ou Https. Il semble que Transport nécessite Https et échoue donc, vous disant qu'il ne peut pas trouver Https même lorsque vous n'avez pas défini de points de terminaison Https. – EzaBlade

2

Cela peut sembler évident, mais avez-vous changé le mode de sécurité sur la configuration de liaison windowsHttpBinding à BasicHttpSecurityMode.None?

<bindings> 
    <basicHttpBinding> 
    <binding name="windowsHttpBinding"> 
     <security mode="None" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

Ressources connexes:

+0

Whe je Http mode de sécurité TransportWithCredentialOnly cela a fonctionné. Pour Https je suis passé à Transport. J'ai pensé à tort que Transport a été autorisé pour Http aussi et ne l'a pas changé. – EzaBlade