La liaison WCF à HTTPS
Je comprends qu'il y a de nombreux posts à ce sujet, et j'ai été par le biais de tous ceux qui sont venus sur ma recherche et mis en œuvre tout ce qui a été mentionné. J'ai un service web WCF qui fonctionne sur mon système local sur HTTP, et il a travaillé sur le serveur HTTP. Mais le client souhaite que cela fonctionne via le protocole HTTPS. Le miriad de messages à ce sujet et d'autres sites qui me montre que ce n'est pas aussi simple que cela doit être, puisque avant cette, le service web ASMX "travaillé" et n'a pas besoin de configuration compliquée.
J'obtiens l'erreur suivante avec ma configuration actuelle:
Ne pouvait pas trouver une adresse de base qui correspond à https pour l'
point de terminaison avec la liaison WSHttpBinding. Enregistré adresse de base des régimes de
[http].
Voici mon code en ce moment, après avoir essayé pendant des jours pour configurer cela fonctionne en vain:
<system.serviceModel>
<!-- -->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" >
<baseAddressPrefixFilters>
<add prefix="https://mysite.com"/>
<add prefix="http://mysite.com"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<!-- Set up Custom Behaviors -->
<behaviors>
<endpointBehaviors>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="WebPostService.WebPostServiceBehavior">
<serviceMetadata httpsGetEnabled="true" httpsGetUrl="WebPostServices.svc/mex" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<!-- Set up the binding configuration -->
<bindings>
<wsHttpBinding>
<binding name="SOAPBinding"
>
<security mode="Transport">
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service
behaviorConfiguration="WebPostService.WebPostServiceBehavior"
name="WebPostService.WebPostService"
>
<host>
<baseAddresses>
<add baseAddress="https://mysite.com/Services/WebPostService.svc"/>
</baseAddresses>
</host>
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="SOAPBinding"
contract="WebPostService.IWebPostService"
>
<identity>
<dns value="mysite.com" />
</identity>
</endpoint>
<endpoint
address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange"
>
</endpoint>
</service>
</services>
</system.serviceModel>
Ce que je fais mal et comment puis-je obtenir que cela fonctionne sur HTTPS? Je suis frustré que ce n'est pas aussi simple que cela devrait être. J'ai été enterré dans WCF documentation MSDN pour les mois de travail sur ce projet, et avez une bonne compréhension des services, les points d'extrémité et des liaisons --- assez pour me frustrer encore plus que si je l'avais aucune connaissance.
Mise à JOUR: je travaille Encore sur ce, j'ai eu une drôle d'erreur lorsque vous essayez de mettre l'URL complète du mex adresse. J'ai changé pour cette:
address="https://prcwebs.com/Services/WebPostService.svc/mex"
et obtenu l'erreur:
Les paramètres de sécurité de ce service nécessite l'Authentification Windows, mais
il n'est pas activé pour l'application IIS qui héberge ce service.
Je n'essaie pas d'utiliser l'Authentification Windows, la configuration de la sécurité n'a pas changé et est toujours à la
<mode de sécurité="Transport" />
Impossible de trouver une adresse de base qui correspond à https pour le point de terminaison avec la liaison WebHttpBinding. Enregistré adresse de base, les régimes de [http]
- n'a pas été utile, rien de mentionné que contribuerait
Impossible de trouver une adresse de base qui correspond le schéma http pour le point de terminaison avec la liaison WSHttpBinding
- Je suis l'aide de la sécurité des transports, cela ne s'applique pas. essayé de changer de différents modes de sécurité, ne peut toujours pas obtenir site de travail.
source d'informationauteur stephenbayer
Vous devez vous connecter pour publier un commentaire.
Vous utilisez le mauvais liaisons pour HTTPS.
Il y a deux classes de liaison. wsHttpBinding et wsHttpsBinding avis de la s.
Vous avez besoin d'ajouter un wsHttpsBinding pour le HTTPS sous les liaisons et vous avez besoin d'un nouveau point de terminaison pour cette liaison.
Aussi l'erreur que vous voyez habituellement j'arrive à voir si IIS n'a pas été mis en place pour https à partir de cet emplacement.
Ajouter
multipleSiteBindingsEnabled="true"
à laserviceHostingEnvironment
et mise à jour de la sécurité pour désactiver les informations d'identification du client:MODIFIER
Ma dernière version de travail sous windows 2003 était avec la configuration suivante.
Vous pouvez accéder au site en https, donc je suppose que le certificat de la partie de l'installation est correcte. Si vous avez quelque chose que vous souhaitez comparer avec ma configuration, faites le moi savoir.
J'ai utilisé et cela a fonctionné pour moi, peut-être que cela peut vous aider à
Pour activer le Https sur WCF WsHttp liaisons, il ya quelques étapes simples qui doit être modifié dans le web.fichier de configuration.
Ces étapes sont les suivantes:
Activer le transport au niveau de la sécurité dans le web.fichier de configuration du service:
Dans cette étape, vous devez modifier le mode de sécurité de l'absence de Transport. Le code ci-dessous montre comment vous pouvez le faire:
La cravate de la liaison et de spécifier la configuration HTTPS
Vous devez associer les liaisons, les aperçus étape, avec les points de fin. utiliser le bindingConfiguration balise pour spécifier la liaison nom. Vous devez également indiquer l'adresse où le service est hébergé. Le code ci-dessous montre comment vous pouvez le faire
.
vous devez également modifier httpGetEnabled à httpsGetEnabled dans le serviceMetaData. Le code ci-dessous montre comment vous pouvez:
Espère que cela a aidé
J'ai utilisé votre configuration exacte de 3.5 réglage et il fonctionne avec
Transport
mode à l'aide declientCredentialType="None"
comme mentionné ci-dessous en Luuk de réponse. Mais juste pour être sûr, je suis allé de l'avant un créé un exemple de projet pour simuler comme une grande partie de votre environnement que j'ai pu recueillir de l'information ici.Pour simuler votre environnement, j'ai mis mon IIS (7.5) pour une utilisation standard
Asp.Net 2.0 Integrated
application de la piscine. J'ai ajouté 3 liaisons http et 3 liaisons https afin de simuler votre "peut avoir qu'une seule adresse par le régime de problème" etbaseAddressPrefixFilters
travaille avec.J'ai fait une recherche et remplacer sur
mysite.com
àlocalhost
. Ci-dessous est le copier coller de configuration exacte que j'ai utilisé pour produire la capture d'écran:web.config
Voici le résultat:
Vous remarquerez que
WebPostService.svc
apparaît deux fois dansmex
url complète. Vous avez besoin de déplacerhttpsGetUrl
à seulementmex
au lieu deWebPostService.svc/mex
(ou de le rejeter complètement, et il fonctionne toujours très bien de mon côté)Si vous souhaitez discuter de cette ou ce qui pourrait être différent entre notre envinronments outre IIS version, je suis en WPF salle de chat presque toute la journée (5-6 heures).