J'essaie de publier un site Web MVC en tant que webrole Azure.
Quand 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 du serveur dans '/' Application.
Erreur d'exécution
Description: une exception s'est produite lors du traitement de votre demande. De plus, 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é arrêtée.
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());
}
}
C'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 causer cette exception et pourquoi je ne peux pas la reproduire localement?
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é nous permettant de diagnostiquer le problème. Vous pouvez également utiliser RDP dans l'instance et accéder au site à partir de IIS localement pour afficher les erreurs.
<system.web>
<customErrors mode="Off" />
En premier lieu, vous avez des références (certaines références (très probablement des références du kit de développement logiciel Azure)) qui ne sont pas définies sur Copy Local = true. Ainsi, toutes vos dépendances ne sont pas déployées.
Commencez par lire l'erreur détaillée et mettez à jour votre question.
UPDATE: Une deuxième option maintenant disponible dans VS2013 est Débogage distant d'un service cloud ou d'une machine virtuelle .
Je n'utilisais pas Azure, mais j'ai la même erreur localement. L'utilisation de <customErrors mode="Off" />
semblait n'avoir aucun effet, mais la vérification des journaux d'applications dans l'observateur d'événements a révélé un avertissement d'ASP.NET contenant tous les détails nécessaires pour résoudre le problème.
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>
J'ai eu ce problème avec seulement 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 "Mode de pipeline géré" du pool d'applications du serveur de "Classique" à "Intégré", la page d'erreur personnalisée s'est déroulée comme prévu.