Ich versuche, eine MVC-Website als Azure-Webrole zu veröffentlichen.
Wenn ich es lokal ausführe, funktioniert alles einwandfrei.
Sobald ich es in Azure veröffentliche und zu einer MVC-Aktion surfe, wird folgende Fehlermeldung angezeigt:
Serverfehler in '/' Anwendung.
Laufzeit Fehler
Beschreibung: Bei der Bearbeitung Ihrer Anfrage ist eine Ausnahme aufgetreten. Darüber hinaus ist beim Ausführen der benutzerdefinierten Fehlerseite für die erste Ausnahme eine weitere Ausnahme aufgetreten. Die Anfrage wurde beendet.
Ich verstehe nicht, wie der Fehlerbehandler auf eine Ausnahme stoßen kann, da Fehler wie folgt behandelt werden:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}
Dies ist meine 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>
Dies ist Error.cshtml:
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = "Error";
}
<h2>
Sorry, an error occurred while processing your request.
</h2>
Was kann diese Ausnahme verursachen und warum kann ich sie nicht lokal reproduzieren?
quelle
Antworten:
Setzen Sie zunächst customErrors = "Off" in der web.config und stellen Sie es erneut bereit, um eine detailliertere Fehlermeldung zu erhalten, die uns bei der Diagnose des Problems hilft. Sie können auch RDP in die Instanz einbinden und von IIS aus lokal zur Site navigieren, um die Fehler anzuzeigen.
Erste Vermutung: Sie haben einige Referenzen (höchstwahrscheinlich Azure SDK-Referenzen), die nicht auf Lokal kopieren = wahr gesetzt sind. Daher werden nicht alle Ihre Abhängigkeiten bereitgestellt.
Gehen Sie zuerst zum detaillierten Fehler und aktualisieren Sie Ihre Frage.
UPDATE: Eine zweite Option, die jetzt in VS2013 verfügbar ist, ist das Remote-Debuggen eines Cloud-Dienstes oder einer virtuellen Maschine .
quelle
Ich habe Azure nicht verwendet, aber lokal wurde der gleiche Fehler angezeigt. Die Verwendung
<customErrors mode="Off" />
schien keine Auswirkung zu haben, aber das Überprüfen der Anwendungsprotokolle in der Ereignisanzeige ergab eine Warnung von ASP.NET, die alle Details enthielt, die ich zur Behebung des Problems benötigte.quelle
Wenn Sie dies zu Ihrer Transformationsdatei web.config hinzufügen, können Sie auch bestimmte Veröffentlichungsoptionen so einstellen, dass das Debuggen aktiviert oder deaktiviert ist:
quelle
Beim Veröffentlichen in IIS über Web Deploy habe ich nur die Optionen für die Dateiveröffentlichung überprüft und ausgeführt. Jetzt gehts! Nach dieser Bereitstellung müssen die Kontrollkästchen nicht aktiviert werden. Ich denke nicht, dass dies eine Lösung für alle sein kann, aber es ist das einzige, was ich tun musste, um mein Problem zu lösen. Viel Glück.
quelle
Ich hatte dieses Problem nur mit
redirectMode="ResponseRewrite"
(redirectMode="ResponseRedirect"
funktionierte gut) und keine der oben genannten Lösungen half mir, das Problem zu lösen. Nachdem ich jedoch den "Managed Pipeline Mode" des Anwendungspools des Servers von "Classic" in "Integrated" geändert hatte, wurde die benutzerdefinierte Fehlerseite wie erwartet angezeigt.quelle
Sie können stattdessen Oracle.ManagedDataAccess.dll verwenden (von Oracle herunterladen), diese DLL in Ihr Projekt-Bin-Verzeichnis aufnehmen und einen Verweis auf diese DLL im Projekt hinzufügen. Im Code "Verwenden von Oracle.MangedDataAccess.Client". Stellen Sie das Projekt wie gewohnt auf dem Server bereit. Oracle Client muss nicht auf dem Server installiert werden. In web.config müssen keine Assembly-Informationen hinzugefügt werden.
quelle