Подтвердить что ты не робот

Как получить информацию об ошибке приложения ASP.NET 5, развернутого на сайтах Azure?

У меня есть решение ASP.NET 5 с веб-сайтом и несколькими библиотеками проектов. Я использую MVC 6 и Entity Framework 7. Локально приложение работает нормально, и до сегодняшнего дня он работал также на Azure, развернутом как Azure Website.

Но сегодня после последнего развертывания на Azure я получил ошибку 500, как это при запуске (все еще работает нормально локально):

enter image description here

Я попытался получить более подробную информацию:

  • с использованием диагностики промежуточного ПО.
  • добавление настроек customError/httpError в файле web.config
  • Загрузка созданной страницы детальной книги

Кажется, что ошибка/исключение происходит во время этапа Startup/Configure, но я все еще получаю общую страницу ошибок без каких-либо подробностей. Даже версия, сгенерированная на сервере (папка DetailedErrors), получила следующее:

enter image description here

Я включил отслеживание неудачных запросов, но по-прежнему не получаю полезной информации:

enter image description here

Даже если я разблокирую код в Startup/Configure и добавлю try/catch, как было предложено, я получил ту же ошибку без détails. Кажется, это проблема конфигурации/компиляции, но сложная для отладки без какой-либо информации.

4b9b3361

Ответ 1

В RC1 (возможно, начиная с бета8) следует использовать:

app.UseDeveloperExceptionPage();

.., который, очевидно, работает только в том случае, если app.Properties["host.AppMode"] является "development".

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

Каким-то образом папка назначения публикации была повреждена во время публикации, потому что я обнаружил, что удаление всего каталога развертывания и повторная публикация решили проблему.

В противном случае вот ссылка: http://docs.asp.net/ru/latest/fundamentals/diagnostics.html https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling

Ответ 2

Ошибки, возникающие при запуске в приложении ASPNET5, действительно трудно отслеживать при запуске приложения в Azure (по крайней мере, с бета-3). Надеюсь, они найдут способ улучшить свой опыт. Я должен был прибегнуть к тому, чтобы зачистить мой стартап до голых костей, а затем добавить код за строкой до тех пор, пока не произойдет сбой (в моем случае это была отсутствующая переменная среды).

Я также использовал такой код (только для отладки), который может помочь в зависимости от того, где происходит ошибка:

public void Configure(IApplicationBuilder app, IHostingEnvironment env )
    {           
        try
        {                       
            // Add MVC to the request pipeline.
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action}/{id?}"
                   );
            });
        }

//exceptions in startup are really bad when running in azure, all you will get is an internal server error
//this code will write the exception message to the browser instead.  Only use for debugging!!!

      catch (Exception ex)          
      {
            app.Run(async context =>
            {
                context.Response.ContentType = "text/plain";
                await context.Response.WriteAsync(ex.Message);
            });
        }
    }

Обновление 10/27/2016 Много изменилось с момента моего первоначального ответа. Последнее руководство опубликовано здесь:

https://docs.asp.net/en/latest/fundamentals/hosting.html

Итак, добавьте:

.CaptureStartupErrors(true) и .UseSetting(WebHostDefaults.DetailedErrorsKey, "true" ) на вашем WebHostBuilder, например:

 var host = new WebHostBuilder()
            .CaptureStartupErrors(true)
            .UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

Ответ 3

Вы должны установить свойство параметров приложения ASPNET_DETAILED_ERRORS в true в файле web.config.

Пример моего отредактированного файла web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="bootstrapper-version" value="1.0.0-beta6" />
    <add key="runtime-path" value="..\approot\runtimes" />
    <add key="dnx-version" value="1.0.0-beta6" />
    <add key="dnx-clr" value="clr" />
    <add key="dnx-app-base" value="..\approot\src\MyApp" />
    <!-- This will turn on detailed errors when deployed to remote servers -->
    <!-- This setting is not recommended for production -->
    <add key="ASPNET_DETAILED_ERRORS" value="true" />
  </appSettings>
  <system.web>
    <httpRuntime targetFramework="4.5.1" />
  </system.web>
</configuration>

Ответ 4

Я испытал ту же самую ошибку с веб-приложением, использующим dnx-clr-win-x64.1.0.0-rc1-update1. Я сделал развертывание непосредственно из Visual Studio 2015 Enterprise Update 1. Я обнаружил, что сайт работал всякий раз, когда я делал первое развертывание в недавно созданном веб-приложении. Начиная со второго развертывания (даже при развертывании одного и того же контента), я начал видеть Internal Server Error 500. Это привело меня к следующему решению:

Включение "Удалить дополнительные файлы в месте назначения" в мастере публикации Visual Studio исправлено для меня.

введите описание изображения здесь

Ответ 5

У меня была такая же проблема, и я потратил много времени на то, чтобы выкапывать журналы ошибок и т.д. (все остальные решения, приведенные выше). Никто из них не дал понять, что случилось.

Что я сделал, это помогло мне, наконец, увидеть, что ошибка состояла в том, чтобы просто попытаться опубликовать локальный IIS (ведь лазурное веб-приложение запускает ваш dnx на IIS внутренне).

Затем я мог сразу увидеть, что есть ошибка, когда IIS пытается скомпилировать источник. (в моем случае был некорректный пакет nuget).

Короче:

Воссоздайте, что происходит на лазурном веб-приложении, опубликовав локальные службы IIS.

Ответ 6

Создайте web.config внутри вашей папки wwwroot с этим контентом:

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

Ответ 7

Вы проверили файл eventlog.xml? Он находится в каталоге D:\home\LogFiles. Вы можете просмотреть его с вашего сайта Kudu приложения или использовать расширение просмотра событий Azure Websites.

Ответ 8

Вы пытались использовать Удаленная отладка Azure Webapp? Скорее всего, есть какое-то исключение, которое отвечает за это, и если вы смотрите окно DEBUG OUTPUT, вы можете увидеть, какое исключение происходит, а затем изменить настройки Visual Studio, чтобы разбить это исключение, чтобы увидеть, где это происходит. проверьте эту статью, чтобы понять, как удалять отладки - http://blogs.msdn.com/b/webdev/archive/2013/11/05/remote-debugging-a-window-azure-web-site-with-visual-studio-2013.aspx

Ответ 9

В моем случае с бета5 пользовательские ошибки в web.config не помогли, локальная IIS была в порядке, и добавление обработчика исключений ничего не отображало. Единственное, что сработало, - это подобрать нуль и переустановить.

Ответ 10

В настройках приложения веб-приложения в разделе Настройки приложения добавьте (или измените значение) Хостинг: Среда на Разработка. Затем вы получаете ту же страницу ошибок, что и в вашей локальной разработке. В моем Startup.cs у меня есть обычный метод Configure() со следующим кодом: (все еще в MVC 1.0 RC1-final)

        if (env.IsDevelopment())
        {
            app.UseBrowserLink();
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else

Надеюсь, это поможет!