2012-03-06 3 views
5

Sto utilizzando l'approccio seguente per gestire 404 errori sui miei siti. Ciò ha funzionato a lungo, ma improvvisamente, nell'ultimo mese, ricevo un'eccezione "Maniglia non inizializzata" con un numero di siti sul nostro server dedicato (alcuni funzionano ancora e sul computer di sviluppo funziona). Qualcuno ha qualche pensiero?gestore 404 che riceve l'eccezione "Maniglia non inizializzata"

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <httpErrors existingResponse="Replace"> 
    <remove statusCode="500" subStatusCode="-1"/> 
    <remove statusCode="404" subStatusCode="-1"/> 
    <error statusCode="404" prefixLanguageFilePath="" path="/default.aspx" responseMode="ExecuteURL"/> 
    <error statusCode="500" prefixLanguageFilePath="" path="/error.aspx" responseMode="ExecuteURL"/> 
    </httpErrors> 
</system.webServer> 

A pagina default.aspx: dettagli

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack && Request.Url.ToString().Contains("?404;")) 
    { 
    HttpContext.Current.RewritePath("~/"); 
    Page.Header.Controls.AddAt(0, new LiteralControl("<base href='" + Request.Url.Scheme + "://" + Request.Url.Authority + "'/>")); 
    Response.StatusCode = 404; 
    Util.DisplayAlert("The page you are looking for no longer exists. If you navigated to this page by clicking a link within this site please <a href='/contact.aspx'>contact us</a> to let us know."); 
    } 
} 

eccezione:

Exception information: 
    Exception type: InvalidOperationException 
    Exception message: Handle is not initialized. 
    at System.Runtime.InteropServices.GCHandle.FromIntPtr(IntPtr value) 
    at System.Web.Hosting.PipelineRuntime.GetManagedPrincipalHandler(IntPtr pRootedObjects) 
    at System.Web.Hosting.UnsafeIISMethods.MgdGetPrincipal(IntPtr pHandler, IntPtr& pToken, IntPtr& ppAuthType, Int32& pcchAuthType, IntPtr& ppUserName, Int32& pcchUserName, IntPtr& pManagedPrincipal) 
    at System.Web.Hosting.IIS7WorkerRequest.GetUserPrincipal() 
    at System.Web.Hosting.IIS7WorkerRequest.SynchronizeVariables(HttpContext context) 
    at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) 
+0

non so il motivo per cui * * questo sta accadendo, ma ho trovato che disattivando runAllManagedModulesForAllRequests il problema scompare. Ho intenzione di provare ad archiviarlo su connect per vedere se la causa è imminente. –

+0

Grazie ad altri per aver confermato che stanno riscontrando il problema. Grazie a danludwig per aver menzionato il fatto che funziona, se sei registrato, è per questo che stavo ottenendo "alcuni [siti] funzionano ancora, e sulla macchina di sviluppo funziona". Poiché questo sembra essere iniziato solo dopo alcune patch, ho archiviato questo problema in Microsoft Connect: https://connect.microsoft.com/VisualStudio/feedback/details/732494/asp-net-httperrors-handle- non-inizializzato – Michael

+0

@PhilipStears Hai finito per archiviarlo su connect? Se hai pubblicato l'url sarebbe stato apprezzato, non ho trovato il tuo rapporto eseguendo una ricerca bing, quindi ho archiviato un nuovo rapporto collegato sopra, ma sarebbe meglio che il mio fosse un duplicato se lo facessi. Grazie. – Michael

risposta

0

Levi: Abbiamo rintracciato la causa principale e stiamo accodando una correzione.

Andrew McLachlan confermato come fisso in .NET 4.5 RC

2

Sto avendo lo stesso problema, ma non ho ancora trovato una soluzione. Ho confermato che il problema è causato dall'impostazione delle proprietà StatusCode o Status nella risposta, influisce su IIS 7 e IIS Express ma non su Cassini, il che ha senso dato la traccia dello stack.

Continuerò a indagare.

Modifica: Nessuna fortuna nel trovare una soluzione. Ho postato la stessa domanda sui forum IIS: http://forums.iis.net/p/1187959/2016914.aspx#2016914

Modifica 2: confermata come risolta in .NET 4.5 RC.

+0

Ho anche notato che questo sta accadendo.Per qualche motivo il 404 funziona quando c'è un utente che ha effettuato l'accesso, ma sta ricevendo "Handle non inizializzato" quando gli utenti non hanno effettuato l'accesso. – danludwig