2010-09-10 6 views
19

J'ai créé et configuré un certificat SSL selon these instructions à partir de MSDN. Je reçois le message d'erreur que les listes this question, mais ne suis pas sûr comment mapper la réponse acceptée dans cette question à mon fichier App.config. Le contenu du fichier de configuration, et le service lui-même a fonctionné correctement sur http, c'est juste sur https que le problème se produit.Windows Service hébergé WCF sur HTTPS

Mon fichier App.config est actuellement:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="TransportSecurity"> 
      <security mode="Transport"> 
      <transport clientCredentialType="None"/> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <services> 
     <service name="LookupServiceHost" behaviorConfiguration="serviceBehaviour"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="https://localhost:54321/MyService"/> 
      </baseAddresses> 
     </host> 
     <endpoint address="" binding="wsHttpBinding" contract="ILookupService" bindingConfiguration="TransportSecurity" /> 
     <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="serviceBehaviour"> 
      <serviceMetadata httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="False"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

Le Erreur Exception renvoyée dans le journal des événements Windows:

service ne peut pas être démarré. System.ServiceModel.AddressAlreadyInUseException: HTTP n'a pas pu enregistrer l'URL https://+:54321/MyService/. Une autre application a déjà enregistré cette URL avec HTTP.SYS. ---> System.Net.HttpListenerException: Impossible d'écouter le préfixe 'https://+:54321/MyService/' car il est en conflit avec un enregistrement existant sur la machine.

Quelqu'un pourrait-il me donner un pointeur sur la façon d'activer cela?

+0

Puisqu'il s'agit de .NET, vous ne recevez pas de message d'erreur, vous recevez une exception. S'il vous plaît poster l'exception complète. –

+6

@John, pedantry de côté, j'ai déclaré que je recevais le même message (IMO) que le poste lié. Cela dit, j'ai ajouté le détail spécifique à ma question. – Rob

Répondre

25

Je pense que vous connectez deux paramètres différents. Netsh peut être utilisé pour ajouter un certificat pour SSL mais aussi pour permettre l'écoute d'application sur un port donné sans s'exécuter sous un compte admin. L'exception cible le deuxième paramètre. Je ne l'ai pas encore vu mais je suppose que vous avez déjà enregistré ce port pour HTTP, essayons donc d'utiliser (et d'enregistrer) HTTPS sur un autre port ou de remplacer un enregistrement précédent.

Edit:

invite de commande Ouvrir avec des privilèges élevés (en tant qu'administrateur). Vérifiez d'abord si SSL cert est attribué à corriger le port:

netsh http show sslcert 

Que vérifier si HTTP écoute est enregistré sur ce port en appelant:

netsh http show urlacl 

Si donc utiliser la commande suivante pour supprimer cette inscription:

netsh http delete urlacl url=http://+:54321/MyService 

enregistrement Ajouter à nouveau pour soutenir l'écoute sur HTTPS:

netsh http add urlacl url=https://+:54321/MyService user=domain\userName 

Lorsque l'utilisateur est un compte utilisé pour exécuter votre service Windows. Si c'est un compte local, utilisez seulement userName.

Remarque: Sous https, il semble que le caractère générique doit être utilisé dans l'URLlacl. Nous ne pouvons pas écrire https://localhost:8733/... pour correspondre à urlacl par défaut de Visual Studios pour http. Cela est probablement logique puisque le nom d'hôte demandé n'est pas disponible avant le déchiffrement.

+0

pourriez-vous appeler ce que les changements que je devrais faire à mes enregistrements de fichier .config/netsh pour faire cela? – Rob

+0

J'ai ajouté quelques commandes netsh pour réenregistrer votre service. –

+1

c'était exactement cela - j'ai eu le mauvais port enregistré. Se lancer dans le deep-end n'est clairement * pas * le moyen le plus simple de gérer WCF et HTTPS, surtout après un verre ou deux de vin! =) – Rob

0

Différentes causes apparentes, mais le même symptôme, pour les autres qui trouvent un moyen de ce poste.J'ai exécuté une application qui avait toujours fonctionné, et après divers (non connecté car je ne m'attendais pas à des problèmes) des combinaisons de l'exécuter via le bureau distant ou localement, se connecter et sortir, et le remplacer par un recompilé mais sinon la version est identique avec un numéro de version différent J'ai le même "Une autre application a déjà enregistré cette URL ... blah, blah".

Apparemment (?) L'enregistrement était spécifique à l'instance qui s'exécutait, et persistait lors des arrêts de cette application. (?) En tout cas, l'ancien adage Windows, "en cas de doute reboot" s'en est occupé. Avec aucun changement à l'application elle-même, puis couru sans aucune plainte. Il se peut que le désenregistrement, etc., ait également fonctionné. C'était sous Windows 10 - Je n'ai jamais vu cela avec des versions antérieures de Windows.

-1

Exécutez Visual Studio Exécuter en tant mode administrateur Fermez l'application Visual Studio et ré ouvert en mode administrateur, c'est assez l'erreur a disparu. Des erreurs HTTP se produisent lorsque vous exécutez Visual Studio en mode non administrateur

+0

L'exécution de Visual Studio en tant qu'administrateur est * presque jamais * la bonne réponse. L'exécution de * n'importe quoi * en tant qu'administrateur est * presque jamais * la bonne réponse. La réponse acceptée détaille la bonne façon de procéder. Si vous exécutez Visual Studio en tant qu'administrateur, votre code devra probablement s'exécuter en production en tant qu'administrateur - ce n'est pas un endroit où vous devriez ou voulez être – Rob

+0

Je reçois toujours cette erreur lorsque je ne débogue pas le projet en mode admin, Une fois que je ferme la solution et ouvre VS en mode admin et débogue l'erreur ne se produit jamais – Lavanya

Questions connexes