«Une exception s'est produite lors du traitement de votre demande. En outre, une autre exception s'est produite lors de l'exécution de la page d'erreur personnalisée… »

104

J'essaie de publier un site Web MVC en tant que webrole Azure.

Lorsque je l'exécute localement, tout fonctionne bien.

Mais une fois que je le publie sur Azure et que je surfe sur une action MVC, j'obtiens cette erreur:

Erreur serveur dans l'application '/'

Erreur d'exécution

Description: une exception s'est produite lors du traitement de votre demande. En outre, une autre exception s'est produite lors de l'exécution de la page d'erreur personnalisée pour la première exception. La demande a été interrompue.

Je ne comprends pas comment le gestionnaire d'erreurs peut rencontrer une exception, car les erreurs sont gérées de la manière par défaut:

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

Ceci est mon 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>

C'est Error.cshtml:

@model System.Web.Mvc.HandleErrorInfo

@{
    ViewBag.Title = "Error";
}

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

Qu'est-ce qui peut provoquer cette exception et pourquoi ne puis-je pas la reproduire localement?

Ilya Kogan
la source
41
Mec, tes erreurs jettent des erreurs. That some serious ish :)
Jack
Je vous suggère d'activer la journalisation détaillée des erreurs dans le portail de gestion et de consulter les journaux sur le site FTP.
Jakub Konecki
Y a-t-il quelque chose dans votre mise en page qui pourrait en être la cause?
drch
@drch Non, rien n'a changé dans la mise en page depuis son dernier fonctionnement.
Ilya Kogan

Réponses:

214

Tout d'abord, définissez customErrors = "Off" dans le fichier web.config et redéployez-le pour obtenir un message d'erreur plus détaillé qui nous aidera à diagnostiquer le problème. Vous pouvez également RDP dans l'instance et accéder au site à partir d'IIS localement pour afficher les erreurs.

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

Tout d'abord, vous avez des références (très probablement des références du SDK Azure) qui ne sont pas définies sur Copy Local = true. Ainsi, toutes vos dépendances ne sont pas déployées.

Accédez d'abord à l'erreur détaillée et mettez à jour votre question.

MISE À JOUR: Une deuxième option désormais disponible dans VS2013 est le débogage à distance d'un service cloud ou d'une machine virtuelle .

viperguynaz
la source
12
Mettre customErrors sur "off" a finalement montré de vraies exceptions. J'enquête maintenant.
Ilya Kogan
1
Comme cela entraîne une erreur IIS, vous pouvez également les personnaliser comme solution de secours à la benfoster.io/blog/aspnet-mvc-custom-error-pages
drzaus
Mes customErrors sont "Off", mais je continue à voir le "Désolé, une erreur s'est produite lors du traitement de votre demande." Erreur. Pouvez-vous m'aider ici? @Ilya Kogan
GuiPab
1
+1 simplement parce que la configuration de customerror = off m'a permis de voir que l'erreur était due au fait que j'avais utilisé une solution de site Web comme modèle pour un autre site Web et que j'avais oublié de vider le dossier bin, c'est-à-dire qu'il s'agissait d'un problème de duplication.
Paul Zahra
7

Je n'utilisais pas Azure, mais j'ai eu la même erreur localement. L'utilisation <customErrors mode="Off" />semblait n'avoir aucun effet, mais la vérification des journaux d'application dans l'Observateur d'événements a révélé un avertissement d'ASP.NET qui contenait tous les détails dont j'avais besoin pour résoudre le problème.

SharpC
la source
3

Si vous ajoutez ceci à votre fichier de transformation web.config, vous pouvez également définir certaines options de publication pour activer ou désactiver le débogage:

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

Lors de la publication sur IIS, par Web Deploy, je viens de vérifier les options de publication de fichiers et de les exécuter. Maintenant ça marche! Après ce déploiement, les cases à cocher n'ont pas besoin d'être cochées. Je ne pense pas que cela puisse être une solution pour tout le monde, mais c'est la seule chose que je devais faire pour résoudre mon problème. Bonne chance.

ASPaiva
la source
0

J'ai eu ce problème uniquement avec redirectMode="ResponseRewrite"( redirectMode="ResponseRedirect"a bien fonctionné) et aucune des solutions ci-dessus ne m'a aidé à résoudre le problème. Cependant, une fois que j'ai changé le "Managed Pipeline Mode" du pool d'applications du serveur de "Classic" à "Integrated", la page d'erreur personnalisée est apparue comme prévu.

Mike Godin
la source
-1

Vous pouvez utiliser Oracle.ManagedDataAccess.dll à la place (télécharger à partir d'Oracle), inclure cette dll dans le répertoire de votre projet, ajouter une référence à cette dll dans le projet. Dans le code, "using Oracle.MangedDataAccess.Client". Déployez le projet sur le serveur comme d'habitude. Pas besoin d'installer Oracle Client sur le serveur. Pas besoin d'ajouter des informations d'assemblage dans web.config.

user3597243
la source
2
Comment Oracle entre dans cette image?
Aamol le