2010-10-14 12 views
8

Nel mio file di gestione delle eccezioni, ho impostato un codice statico su 404 e quindi ho eseguito il rendering di una pagina HTML, per la pagina di errore (si pensi a fail-whale).IIS7 Hijacks My Coldfusion Errore Pagina

<cfheader statuscode="404" statustext="Application Exception"> 

<html><head><title>Error</title></head><body><h1>There was an error yo!</h1></body></html> 

Questo è ovviamente troppo semplificato, ma solo per assicurarsi che tutto è stato dimostrato.

Quello che ho trovato è che da una richiesta ASP.NET, possono impostare una variabile "Response.TrySkipIisCustomErrors = true" per impedire a IIS di mostrare la propria pagina di errore.

Come fa qualcuno in Coldfusion a farlo/come posso dire a IIS di smettere di pensare che sappia meglio di me shenanigans.

risposta

21

Questo potrebbe aiutare:

<configuration> 
    <system.webServer> 
    <httpErrors existingResponse="PassThrough" /> 
    </system.webServer> 
</configuration> 

Per maggiori informazioni:

HTTP Errors (IIS.NET)
What to expect from IIS7 custom error module (IIS.NET)

Se questo non dovesse funzionare allora si potrebbe provare a scrivere un .NET HttpModule collegare alla pipeline di richiesta/risposta IIS per impostare Response.TrySkipCustomErrors. Non ideale

L'oggetto di richiesta di lavoro di ASP.NET chiama una funzione esportata denominata MgdSetStatusW. Il problema qui è che a meno che Coldfusion non esponga questo flag, non sarà possibile impostare il valore direttamente in CF.

Rovistando con .NET Reflector ho visto impostare ASP.NET lo stato della risposta utilizzando:

[DllImport("webengine4.dll", CharSet=CharSet.Unicode)] 
internal static extern int MgdSetStatusW(IntPtr pRequestContext, 
    int dwStatusCode, int dwSubStatusCode, string pszReason, 
    string pszErrorDescription, bool fTrySkipCustomErrors); 
+0

Il web.config metodo di tipo di lavorato, ma antepone ancora un ridicolo "La pagina non può essere visualizzata perché un si è verificato un errore interno del server. " blocco di testo prima che venga visualizzato il mio modello. Non so che scriverò qualcosa per .NET in quanto sarebbe troppo stupido da fare. Questa soluzione deve essere modulare in modo che se il sito viene copiato su qualsiasi server, sia esso Apache/IIS6/IIS7, tutto funziona correttamente. –

+0

@Tyler - probabilmente qualcosa da aumentare con Adobe, per quanto doloroso possa essere quel processo. – Kev

+0

Aspetta, non importa, ho sbagliato, stavo usando errorMode invece di existingResponse. Funziona alla grande ora, grazie. –

Problemi correlati