2010-09-10 36 views
19

He creado y configurado un certificado SSL según these instructions de MSDN. Recibo el mensaje de error que enumera this question, pero no estoy seguro de cómo asignar la respuesta aceptada en esa pregunta a mi archivo App.config. El contenido del archivo de configuración y el servicio en sí funcionó correctamente en http, el problema está en https justo por encima de https.servicio de Windows alojado WCF a través de HTTPS

Mi archivo App.config es actualmente:

<?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> 

La Excepción error devuelto en el registro de sucesos de Windows:

servicio no se puede iniciar. System.ServiceModel.AddressAlreadyInUseException: HTTP no pudo registrar la URL https://+:54321/MyService/. Otra aplicación ya ha registrado esta URL con HTTP.SYS. ---> System.Net.HttpListenerException: Error al escuchar el prefijo 'https://+:54321/MyService/' porque entra en conflicto con un registro existente en la máquina.

¿Podría alguien darme un puntero sobre cómo habilitar esto?

+0

Dado que esto es .NET, no está recibiendo un mensaje de error, está recibiendo una excepción. Por favor, publique la excepción completa. –

+6

@John, aparte de la pedantería, dije que estaba recibiendo el mismo mensaje (IMO) que la publicación vinculada. Dicho esto, agregué el detalle específico a mi pregunta. – Rob

Respuesta

25

creo que va a conectar dos configuraciones diferentes. Netsh se puede usar para agregar certificado para SSL pero también para permitir que la aplicación escuche en un puerto determinado sin ejecutar bajo la cuenta de administrador. La excepción se dirige a la segunda configuración. No lo he visto antes, pero supongo que ya ha registrado este puerto para HTTP, así que intentemos usar (y registrar) HTTPS en otro puerto o reemplazar el registro anterior.

Editar: pronta

abierto sistema con privilegios elevados (como administrador). En primer lugar comprobar si se ha asignado certificado SSL para corregir puerto:

netsh http show sslcert 

limitan a verificar si escucha HTTP se ha registrado en ese puerto llamando a:

netsh http show urlacl 

Si es así utilizar siguiente comando para eliminar ese registro:

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

Agregar nuevo registro para apoyar la escucha en HTTPS:

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

donde usuario es cuenta utilizada para ejecutar el servicio de Windows. Si es una cuenta local, use solo userName.

Nota: En https, parece que se debe usar el comodín en el urlacl. No podemos escribir https://localhost:8733/... para que coincida con el urlacl predeterminado de Visual Studios para http. Esto probablemente tenga sentido ya que el nombre de host solicitado no está disponible hasta después del descifrado.

+0

¿podría decirme qué cambios debo hacer en mis registros de .config file/netsh para hacer eso? – Rob

+0

Agregué algunos comandos netsh para volver a registrar su servicio. –

+1

era exactamente eso: tenía el puerto incorrecto registrado. Enfocarme en el fondo es claramente * no * la forma más fácil de lidiar con WCF y HTTPS, ¡especialmente después de un vaso o dos de vino! =) – Rob

0

diferente causa aparente, pero el mismo síntoma, para otros que hay manera de encontrar a este mensaje.

Ejecuté una aplicación que "siempre funcionó", y después de varias (no registradas desde que no esperaba) combinaciones de ejecutarlo a través de escritorio remoto o localmente, iniciar y cerrar sesión, y reemplazarlo con un compilado pero de lo contrario, la versión idéntica con un número de versión diferente obtuve el mismo "Otra aplicación ya ha registrado esta URL ... bla, bla".

Aparentemente (?) El registro era específico de la instancia que se ejecutó, y persistió durante los cierres de esa aplicación. (?) En cualquier caso, el antiguo adagio de Windows, "en caso de duda, reiniciar" se encargó de ello. Sin cambios en la aplicación en sí, se ejecutó sin quejas. Puede ser que el retiro del registro, etc., también hubiera funcionado. Esto fue en Windows 10: nunca he visto esto con versiones anteriores de Windows.

-1

Ejecutar Visual Studio en Ejecutar como administrador del modo de Cierre la aplicación de Visual Studio y re abrirlo en el modo de administrador, es suficiente que el error se ha ido. Los errores HTTP ocurren cuando está ejecutando Visual Studio en modo no administrador

+0

Ejecutar Visual Studio como administrador es * casi nunca * la respuesta correcta. Ejecutar * cualquier cosa como administrador es * casi nunca * la respuesta correcta. La respuesta aceptada detalla la forma correcta de hacerlo. Si ejecuta Visual Studio como administrador, es probable que su código se ejecute en producción como administrador; ese no es el lugar donde debe o quiere estar – Rob

+0

. Siempre obtengo este error cuando no estoy depurando el proyecto en modo de administrador. Una vez que cierro la solución y abro VS en modo admin y depuro el error nunca ocurre – Lavanya

Cuestiones relacionadas