«Исключение при обработке вашего запроса. Кроме того, при выполнении настраиваемой страницы ошибки возникла еще одна исключительная ситуация… »

104

Я пытаюсь опубликовать веб-сайт MVC как веб-роль Azure.

Когда запускаю локально, все работает нормально.

Но как только я публикую его в Azure и перехожу к некоторому действию MVC, я получаю следующую ошибку:

Ошибка сервера в приложении '/'

Ошибка выполнения

Описание: исключение при обработке вашего запроса. Кроме того, при выполнении настраиваемой страницы ошибки для первого исключения возникло другое исключение. Запрос был прекращен.

Я не понимаю, как обработчик ошибок может столкнуться с исключением, потому что ошибки обрабатываются по умолчанию:

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

Это мой 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>

Это Error.cshtml:

@model System.Web.Mvc.HandleErrorInfo

@{
    ViewBag.Title = "Error";
}

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

Что может вызвать это исключение и почему я не могу воспроизвести его локально?

Илья Коган
источник
41
Чувак, ваши ошибки порождают ошибки. Это какой-то серьезный ишн :)
Джек
Я предлагаю вам включить подробный журнал ошибок на портале управления и просматривать журналы на FTP-сайте.
Jakub Konecki
Есть ли что-нибудь в вашем макете, что может быть виновато?
drch
@drch Нет, с момента последней работы в макете ничего не изменилось.
Илья Коган

Ответы:

214

Сначала установите customErrors = "Off" в web.config и выполните повторное развертывание, чтобы получить более подробное сообщение об ошибке, которое поможет нам диагностировать проблему. Вы также можете подключиться к экземпляру RDP и перейти на сайт из IIS локально, чтобы просмотреть ошибки.

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

Однако первое предположение - у вас есть некоторые ссылки (скорее всего, ссылки на Azure SDK), для которых не задано значение Copy Local = true. Итак, все ваши зависимости не развертываются.

Сначала перейдите к подробному описанию ошибки и обновите свой вопрос.

ОБНОВЛЕНИЕ: второй вариант, который теперь доступен в VS2013, - это удаленная отладка облачной службы или виртуальной машины .

гадюка
источник
12
Установка customErrors на "off" наконец-то показала некоторые реальные исключения. Я исследую их сейчас.
Илья Коган
1
Поскольку это приводит к ошибке IIS, вы также можете настроить их как запасной вариант а-ля benfoster.io/blog/aspnet-mvc-custom-error-pages
drzaus
Мои customErrors выключены, но я продолжаю видеть сообщение «К сожалению, при обработке вашего запроса произошла ошибка». ошибка. Не могли бы вы мне помочь? @Ilya Kogan
GuiPab
1
+1 просто потому, что установка customerror = off позволила мне увидеть, что ошибка была вызвана тем, что я использовал решение для веб-сайта в качестве шаблона для другого веб-сайта и забыл очистить папку bin, т.е. это была проблема дублирования.
Пол Захра
7

Я не использовал Azure, но у меня была такая же ошибка локально. С помощью<customErrors mode="Off" /> похоже, не имело никакого эффекта, но проверка журналов приложений в средстве просмотра событий показала предупреждение от ASP.NET, которое содержало все подробности, необходимые для решения проблемы.

SharpC
источник
3

Если вы добавите это в свой файл преобразования web.config, вы также можете установить определенные параметры публикации, чтобы включить или отключить отладку:

<system.web>
    <customErrors mode="Off" defaultRedirect="~/Error.aspx" xdt:Transform="Replace"/>
</system.web>
Коннер
источник
1

При публикации в IIS с помощью веб-развертывания я просто проверил параметры публикации файла и выполнил. Теперь это работает! После этого развертывания флажки устанавливать не нужно. Я не думаю, что это может быть решением для всех, но это единственное, что мне нужно было сделать, чтобы решить мою проблему. Удачи.

ASPaiva
источник
0

У меня была эта проблема только с redirectMode="ResponseRewrite"( redirectMode="ResponseRedirect"работала нормально), и ни одно из вышеперечисленных решений не помогло мне решить проблему. Однако, как только я изменил «Управляемый режим конвейера» пула приложений сервера с «Классического» на «Интегрированный», пользовательская страница ошибок появилась, как и ожидалось.

Майк Годин
источник
-2

Вместо этого вы можете использовать Oracle.ManagedDataAccess.dll (загрузить с Oracle), включить эту dll в свой каталог bin проекта, добавить ссылку на эту dll в проекте. В коде «с использованием Oracle.MangedDataAccess.Client». Разверните проект на сервере как обычно. Нет необходимости устанавливать Oracle Client на сервер. Нет необходимости добавлять информацию о сборке в web.config.

user3597243
источник
3
Как Oracle попал в эту картину?
Aamol