2012-04-04 15 views
7

Tengo problemas para que ServiceStack funcione con HTTPS en IIS6 y parece que no puedo encontrar ninguna documentación sobre cómo configurarlo. Actualmente tengo una configuración de punto final como tal - http://example.com/api.ashx. Cuando busco esto, obtengo la útil página generada de ServiceStack que explica las API disponibles en http://example.com/api.ashx/metadata. Cuando hojeo a https://example.com/api.ashx (nótese https) i lugar este mensaje de error -No se puede hacer que ServiceStack funcione en IIS6 con HTTPS

Error de servidor en la aplicación '/'. El recurso no puede ser encontrado. Descripción: HTTP 404. El recurso que está buscando (o una de sus dependencias) podría haberse eliminado, cambiar de nombre o no está disponible temporalmente. Revise la siguiente URL y asegúrese de que esté escrito correctamente. URL solicitada: /api.ashx

Tengo el siguiente establecido en mi web.config (como en el ejemplo aquí - http://www.servicestack.net/ServiceStack.Hello/) -

<!-- ServiceStack: Required to host at: /api.ashx --> 
    <location path="api.ashx"> 
     <system.web> 
      <httpHandlers> 
       <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/> 
      </httpHandlers> 
     </system.web> 

En mi caja local de Windows 7 estoy corriendo IIS7 y funciona bien, pero los entornos de prueba y en vivo todavía usan IIS6 y no puedo hacer que funcione allí.

Otras páginas regulares de aspx funcionan bien al usar https.

¡Apreciaría a cualquiera que pueda darme un empujón en la dirección correcta!

Respuesta

9

El problema con IIS 6 es que la interconexión de solicitudes de IIS 6.0 no reconoce una ruta sin una extensión ASP.NET, por ejemplo, aspx no se pasa al ASP.NET isapi hander. Así que en general hay 2 opciones para conseguir que esto suceda para que pueda obtener ServiceStack se ejecute en IIS 6:

  1. Cambie la ruta servicestack en Web.Config de '*' a 'servicestack.ashx'

    <system.web>

    <httpHandlers> < agregar la ruta = tipo "servicestack.ashx" = "ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verbo = "*"/> </httpHandlers >

    </system.web>

  2. agregar una asignación de comodín para el directorio virtual para aprobar todas las solicitudes no controladas a ASP.NET: Siga estos pasos para crear un mapa de scripts de comodines con IIS 6.0:

    1. Haga clic derecho en una página web y seleccione Propiedades
    2. Seleccione la ficha Directorio
    3. Haga clic en el botón Configuración
    4. Seleccione la ficha Asignaciones
    5. Haga clic en el botón Insertar (véase la Figura 4)
    6. Pegue la ruta al aspnet_isapi.dll en el campo Ejecutable (puede copiar esta ruta desde el mapa de scripts para los archivos .aspx)
    7. Desmarque la casilla eckbox etiquetada Compruebe que el archivo existe
    8. Haga clic en el botón OK

IIS 6.0 Wildcard mapping

+0

En realidad, hubo otro paso que eché de menos (cuestión relacionada con el certificado). Mi error. Esto ayuda, gracias :) –

+0

Opción probada 1: ahora recibo un error 404 en lugar de un controlador no encontrado, intento Opción 2: sigue sin obtener el error del controlador no encontrado, intenté la opción 1 de nuevo después de configurar el mapeo de la extensión comodín en la opción 2: error 404. ¿Algún otro pensamiento aquí? Estoy bastante perplejo al hacer que esto funcione en IIS6. – kmehta

1

mythz respuesta no funcionó para mí.

Lo he conseguido agregando una etiqueta de ubicación a web.config con la configuración de la pila de servicios. me encontré con que servicestack trabajó con path = "*" -, pero tomó a muchas peticiones (EPiServer), pero lo resolvió así:

<location path="UniqueTag"> 
    <system.web> 
     <httpHandlers> 
      <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" /> 
     </httpHandlers> 
    </system.web> 
</location> 

Y luego el prefijo todas las rutas con el UniqueTag:

[Route("/UniqueTag/DeletePost/{Id}", Verbs = "POST")] 

Pero tenga en cuenta que la opción 2 de la respuesta de mythz también podría ser necesaria, ya que fue una configuración predeterminada en nuestra solución.

Cuestiones relacionadas