"Si è verificata un'eccezione durante l'elaborazione della tua richiesta. Inoltre, si è verificata un'altra eccezione durante l'esecuzione della pagina di errore personalizzata ... "


104

Sto cercando di pubblicare un sito Web MVC come ruolo Web di Azure.

Quando lo eseguo localmente, tutto funziona bene.

Ma una volta che lo pubblico in Azure e navigo in qualche azione MVC, ottengo questo errore:

Errore del server nell'applicazione '/'

Errore di runtime

Descrizione: si è verificata un'eccezione durante l'elaborazione della richiesta. Inoltre, si è verificata un'altra eccezione durante l'esecuzione della pagina di errore personalizzata per la prima eccezione. La richiesta è stata terminata.

Non capisco come il gestore degli errori possa incontrare 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 posso riprodurla localmente?


41
Amico, i tuoi errori generano errori. Che cosa seria :)
Jack il

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

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

@drch No, non è cambiato nulla nel layout dall'ultima volta che ha funzionato.
Ilya Kogan

Risposte:


214

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

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

Prima ipotesi, però: hai alcuni riferimenti (molto probabilmente riferimenti ad Azure SDK) che non sono impostati su Copia locale = vero. Quindi, tutte le tue dipendenze non vengono distribuite.

Vai prima all'errore dettagliato e aggiorna la tua domanda.

AGGIORNAMENTO: una seconda opzione ora disponibile in VS2013 è il debug remoto di un servizio cloud o di una macchina virtuale .


12
L'impostazione di customErrors su "off" mostrava finalmente alcune vere eccezioni. Li sto indagando adesso.
Ilya Kogan

1
Poiché genera
drzaus

I miei customErrors sono "Off", ma continuo a visualizzare il messaggio "Spiacenti, si è verificato un errore durante l'elaborazione della tua richiesta". errore. Potresti aiutarmi qui? @Ilya Kogan
GuiPab

1
+1 semplicemente perché l'impostazione customerror = off mi ha permesso di vedere che l'errore è stato causato perché avevo utilizzato una soluzione di sito Web come modello per un altro sito Web e mi ero dimenticato di cancellare la cartella bin, ovvero si trattava di un problema di duplicazione.
Paul Zahra,

7

Non stavo usando Azure, ma ho ricevuto lo stesso errore localmente. L'utilizzo <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.


3

Se lo aggiungi al tuo file di trasformazione web.config, puoi anche impostare alcune opzioni di pubblicazione per abilitare o disabilitare il debug:

<system.web>
    <customErrors mode="Off" defaultRedirect="~/Error.aspx" xdt:Transform="Replace"/>
</system.web>

1

Durante la pubblicazione su IIS, tramite Web Deploy, ho appena controllato le Opzioni di pubblicazione dei file ed eseguito. Ora funziona! Dopo questa distribuzione, non è necessario selezionare le caselle di controllo. Non penso che questa possa essere una soluzione per tutti, ma è l'unica cosa che dovevo fare per risolvere il mio problema. In bocca al lupo.


0

Ho avuto questo problema solo con redirectMode="ResponseRewrite"(ha redirectMode="ResponseRedirect"funzionato bene) e nessuna delle soluzioni di cui sopra mi ha aiutato a 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 è apparsa come previsto.


-1

È possibile utilizzare invece Oracle.ManagedDataAccess.dll (download da Oracle), includere quella dll nella directory bin del progetto, aggiungere il riferimento a quella dll nel progetto. Nel codice, "utilizzando Oracle.MangedDataAccess.Client". Distribuisci il progetto sul server come al solito. Non è necessario installare Oracle Client sul server. Non è necessario aggiungere informazioni sull'assembly in web.config.


2
Come è entrato Oracle in questo quadro?
Aamol
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.