2013-06-24 26 views
71

Sto tentando di pubblicare un sito Web MVC come webrole di Azure."Si è verificata un'eccezione durante l'elaborazione della richiesta. Inoltre, si è verificata un'altra eccezione durante l'esecuzione della pagina di errore personalizzata ..."

Quando lo eseguo localmente, tutto funziona correttamente.

Ma una volta che pubblico ad Azure e surf per qualche azione MVC, ottengo questo errore:

Server Error in '/' Application.

Runtime Error

Description: An exception occurred while processing your request. Additionally, another exception occurred while executing the custom error page for the first exception. The request has been terminated.

Non capisco come il gestore di errore può rilevare un'eccezione, perché gli errori vengono gestiti nel modo predefinito:

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
    } 
} 

Questo è il mio web.config:

<?xml version="1.0"?> 

<configuration> 
    <configSections> 
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
     <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 

    <system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
     <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     </namespaces> 
    </pages> 
    </system.web.webPages.razor> 

    <appSettings> 
    <add key="webpages:Enabled" value="false" /> 
    </appSettings> 

    <system.web> 
     <httpHandlers> 
     <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
    </httpHandlers> 

    <pages 
     validateRequest="false" 
     pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <controls> 
     <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> 
     </controls> 
    </pages> 
    </system.web> 

    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 

    <handlers> 
     <remove name="BlockViewHandler"/> 
     <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
    </system.webServer> 
</configuration> 

Questo è Error.cshtml:

@model System.Web.Mvc.HandleErrorInfo 

@{ 
    ViewBag.Title = "Error"; 
} 

<h2> 
    Sorry, an error occurred while processing your request. 
</h2> 

Cosa può causare questa eccezione e perché non è possibile riprodurlo localmente?

+31

Man, i tuoi errori generano errori. Che alcuni seri problemi :) – Jack

+0

Ti suggerisco di abilitare la registrazione dettagliata degli errori nel portale di gestione e rivedere i log sul sito FTP. –

+0

C'è qualcosa nel tuo layout che potrebbe essere il colpevole? – drch

risposta

167

Per prima cosa, impostare customErrors = "Off" nel web.config e ridistribuire per ottenere un messaggio di errore più dettagliato che ci aiuterà a diagnosticare il problema. È anche possibile eseguire l'RDP nell'istanza e accedere al sito da IIS localmente per visualizzare gli errori.

<system.web> 
     <customErrors mode="Off" /> 

prima ipotesi però - Se avete alcuni riferimenti (più probabili riferimenti SDK Azure) che non sono impostati per copia locale = true. Quindi, tutte le tue dipendenze non vengono distribuite.

Ottenere prima l'errore dettagliato e aggiornare la domanda.

AGGIORNAMENTO: Una seconda opzione ora disponibile in VS2013 è Remote Debugging a Cloud Service or Virtual Machine.

+9

L'impostazione di CustomErrors su "off" ha infine mostrato alcune vere eccezioni. Li sto investigando ora. –

+1

@viperguynaz ... Grazie per la risposta! Non ne ero a conoscenza prima. – Vikram

+1

Poiché si verifica un errore IIS, è possibile personalizzarli anche come fallback a http://benfoster.io/blog/aspnet-mvc-custom-error-pages – drzaus

3

Non stavo usando Azure, ma ho ricevuto lo stesso errore localmente. L'utilizzo di <customErrors mode="Off" /> sembrava non avere alcun effetto, ma il controllo dei registri dell'applicazione nel Visualizzatore eventi ha rivelato un avviso da ASP.NET che conteneva tutti i dettagli necessari per risolvere il problema.

-1

Assicurarsi di cancellare gli errori ModelState o continuerà a tentare di elaborarli.

foreach (var modelValue in ModelState.Values) 
       { 
        modelValue.Errors.Clear(); 
       } 
0

Ho avuto questo problema con solo redirectMode="ResponseRewrite" (redirectMode="ResponseRedirect" ha funzionato bene) e nessuna delle soluzioni di cui sopra ha aiutato la mia risolvere il problema. Tuttavia, una volta modificata la "Modalità pipeline gestita" del pool di applicazioni del server da "Classico" a "Integrato", la pagina di errore personalizzata è stata visualizzata come previsto.

Problemi correlati