„Wystąpił wyjątek podczas przetwarzania Twojego żądania. Ponadto wystąpił inny wyjątek podczas wykonywania niestandardowej strony błędu… ”

104

Próbuję opublikować witrynę sieci Web MVC jako przeglądarkę Azure.

Kiedy uruchamiam go lokalnie, wszystko działa dobrze.

Ale kiedy opublikuję go na platformie Azure i przejdę do jakiejś akcji MVC, pojawia się ten błąd:

Błąd serwera w aplikacji „/”.

Błąd wykonania

Opis: Wystąpił wyjątek podczas przetwarzania Twojego żądania. Ponadto wystąpił inny wyjątek podczas wykonywania niestandardowej strony błędu dla pierwszego wyjątku. Żądanie zostało zakończone.

Nie rozumiem, jak program obsługi błędów może napotkać wyjątek, ponieważ błędy są obsługiwane w sposób domyślny:

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

To jest mój 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>

To jest Error.cshtml:

@model System.Web.Mvc.HandleErrorInfo

@{
    ViewBag.Title = "Error";
}

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

Co może spowodować ten wyjątek i dlaczego nie mogę go odtworzyć lokalnie?

Ilya Kogan
źródło
41
Człowieku, twoje błędy powodują błędy. To poważna sprawa :)
Jack
Proponuję włączyć szczegółowe logowanie błędów w portalu zarządzania i przejrzeć dzienniki w witrynie FTP.
Jakub Konecki
Czy jest coś w Twoim układzie, co może być przyczyną?
drch
@drch Nie, nic się nie zmieniło w układzie od czasu ostatniej pracy.
Ilya Kogan

Odpowiedzi:

214

Najpierw ustaw customErrors = "Off" w web.config i przeprowadź ponowne wdrożenie, aby uzyskać bardziej szczegółowy komunikat o błędzie, który pomoże nam zdiagnozować problem. Możesz również RDP do wystąpienia i przejść do witryny z usług IIS lokalnie, aby wyświetlić błędy.

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

Najpierw jednak zgadnij - masz pewne odwołania (najprawdopodobniej odwołania do zestawu Azure SDK), które nie są ustawione na wartość Kopiuj lokalne = true. Tak więc wszystkie zależności nie są wdrażane.

Najpierw przejdź do szczegółowego błędu i zaktualizuj swoje pytanie.

AKTUALIZACJA: Drugą opcją teraz dostępną w VS2013 jest zdalne debugowanie usługi w chmurze lub maszyny wirtualnej .

viperguynaz
źródło
12
W końcu ustawienie customErrors na „off” pokazało kilka rzeczywistych wyjątków. Teraz je badam.
Ilya Kogan
1
Ponieważ powoduje to błąd IIS, możesz je również dostosować jako rezerwę
drzaus
Moje błędy niestandardowe są wyłączone, ale nadal widzę komunikat „Przepraszamy, wystąpił błąd podczas przetwarzania żądania”. błąd. Czy możesz mi tu pomóc? @Ilya Kogan
GuiPab
1
+1 po prostu dlatego, że ustawienie customerror = off pozwoliło mi zobaczyć, że błąd był spowodowany tym, że użyłem rozwiązania witryny internetowej jako szablonu dla innej witryny i zapomniałem wyczyścić folder bin, tj. Był to problem z powielaniem.
Paul Zahra
7

Nie korzystałem z platformy Azure, ale lokalnie wystąpił ten sam błąd. <customErrors mode="Off" />Wydawało się, że używanie nie przyniosło żadnego efektu, ale sprawdzenie dzienników aplikacji w Podglądzie zdarzeń ujawniło ostrzeżenie ze strony ASP.NET, które zawierało wszystkie szczegóły potrzebne do rozwiązania problemu.

SharpC
źródło
3

Jeśli dodasz to do pliku transformacji web.config, możesz również ustawić niektóre opcje publikowania, aby debugowanie było włączone lub wyłączone:

<system.web>
    <customErrors mode="Off" defaultRedirect="~/Error.aspx" xdt:Transform="Replace"/>
</system.web>
Conner
źródło
1

Podczas publikowania na IIS, przez Web Deploy, właśnie sprawdziłem Plik Opcje publikowania i stracony. Teraz działa! Po wdrożeniu pola wyboru nie muszą być zaznaczane. Nie sądzę, żeby to rozwiązanie było dla wszystkich, ale to jedyna rzecz, jaką musiałem zrobić, aby rozwiązać mój problem. Powodzenia.

ASPaiva
źródło
0

Miałem ten problem tylko z redirectMode="ResponseRewrite"( redirectMode="ResponseRedirect"działało dobrze) i żadne z powyższych rozwiązań nie pomogło mi rozwiązać problemu. Jednak po zmianie „Managed Pipeline Mode” puli aplikacji serwera z „Classic” na „Integrated” niestandardowa strona błędu pojawiła się zgodnie z oczekiwaniami.

Mike Godin
źródło
-2

Zamiast tego można użyć Oracle.ManagedDataAccess.dll (pobierz z Oracle), dołączyć ten plik dll do katalogu bin dir projektu, dodać odwołanie do tego pliku dll w projekcie. W kodzie „przy użyciu Oracle.MangedDataAccess.Client”. Wdróż projekt na serwerze w zwykły sposób. Nie ma potrzeby instalowania klienta Oracle na serwerze. Nie ma potrzeby dodawania informacji o zestawie w web.config.

user3597243
źródło
3
Jak Oracle wkroczyło w ten obraz?
Aamol