Как получить информацию об ошибке приложения 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. Кажется, это проблема конфигурации/компиляции, но сложная для отладки без какой-либо информации.
Ответы
Ответ 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
Надеюсь, это поможет!