2012-04-04 3 views
7

Ho riscontrato problemi nel far funzionare ServiceStack con HTTPS in IIS6 e non riesco a trovare alcuna documentazione sull'impostazione. Attualmente ho una configurazione endpoint come questa - http://example.com/api.ashx. Quando cerco questo, ottengo l'utile pagina generata da ServiceStack che spiega le API disponibili su http://example.com/api.ashx/metadata. quando navigo a https://example.com/api.ashx (notare https) ho invece ottengo questo messaggio di errore -Impossibile far funzionare ServiceStack in IIS6 con HTTPS

Server Error in '/' applicazione. La risorsa non può essere trovata. Descrizione: HTTP 404. La risorsa che stai cercando (o una delle sue dipendenze ) potrebbe essere stata rimossa, se il suo nome è stato modificato, oppure è temporaneamente non disponibile. Si prega di rivedere il seguente URL e fare in modo che sia scritto correttamente. URL richiesto: /api.ashx

Ho il seguente istituito nel mio web.config (come da esempio qui - 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> 

sul mio Windows 7 box locale sto correndo IIS7 e funziona bene, ma il test e gli ambienti live stanno ancora utilizzando IIS6 e non riesco a farlo funzionare.

Altre pagine regolari di aspx funzionano correttamente quando si utilizza https.

Gradirei chiunque possa darmi una spinta nella giusta direzione!

risposta

9

Il problema con IIS 6 è che la pipeline di richieste di IIS 6.0 non riconosce un percorso senza un'estensione ASP.NET. E. Aspx non viene passato all'hangap di ASP.NET. Quindi ci sono generalmente 2 opzioni per ottenere questo accada in modo da poter ottenere ServiceStack per l'esecuzione su IIS 6:

  1. Modificare il percorso servicestack nel web.config da '*' a 'servicestack.ashx'

    <system.web>

    <httpHandlers> < aggiungere path = tipo "servicestack.ashx" = "ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb = "*"/> </httpHandlers >

    </system.web>

  2. Aggiungi una mappatura jolly per la directory virtuale di passare tutte le richieste non gestite da ASP.NET: Seguire questa procedura per creare un mapping di script con caratteri jolly con IIS 6.0:

    1. tasto destro del mouse un sito web e selezionare Proprietà
    2. Selezionare la scheda Home directory
    3. Fare clic sul pulsante Configurazione
    4. Selezionare la scheda Mapping
    5. Fare clic sul pulsante Inserisci (Figura 4)
    6. Incollare il percorso di aspnet_isapi.dll nel campo Eseguibile (è possibile copiare questo percorso dalla mappa degli script per i file .aspx)
    7. Deselezionare la ch eckbox etichettato Verificare l'esistenza dei file
    8. Fare clic sul pulsante OK

IIS 6.0 Wildcard mapping

+0

In realtà, c'è stato un altro passaggio che ho perso (problema relativo al certificato). Colpa mia. Questo aiuta comunque, grazie :) –

+0

Provato opzione 1: ho un errore 404 ora invece di un errore non trovato gestore, Ho provato l'opzione 2: ancora ottenere il gestore non trovato errore, Ho provato l'opzione 1 di nuovo dopo aver impostato il mapping dell'estensione jolly in opzione 2: errore 404. Qualche altro pensiero qui? Sono piuttosto convinto di farlo funzionare in IIS6. – kmehta

1

mythz risposta non ha funzionato per me.

Ho funzionato aggiungendo un tag di posizione a web.config con la configurazione del servicestack. ho scoperto che servicestack ha lavorato con il percorso = "*" - ma ha portato a molte richieste (EPiServer) ma risolto in questo modo:

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

E poi prefisso tutte le rotte con l'UniqueTag:

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

Notare che potrebbe essere necessaria anche l'opzione 2 della risposta di mythz, perché era la configurazione predefinita nella nostra soluzione.