Приложение .net core 3.1 на iis 10 выдает внутреннюю ошибку 500 и нигде нет журналов

Я полностью застрял в простом приложении .net-core 3.1 на IIS 10, которое упорно выдает внутреннюю ошибку 500, но отказывается давать какие-либо журналы или любые другие подсказки по проблеме.

Приложение прекрасно работает в dev env и при запуске с dotnet myapp.dll.

  • Я использую только http-порт 80, чтобы он заработал, и удалил app.UseHttpsRedirection (); из Startup.cs
  • Я установил ASP.NET Core 3.1 Runtime (v3.1.3) - Windows Hosting Bundle на сервере Windows 2016
  • В пуле приложений нет управляемого кода и интегрированного конвейера.
  • Сайт в IIS отвечает на простые html-страницы
  • Приложение было опубликовано в папке как приложение в IIS, как интегрированная платформа, так и как автономное.
  • Как я вижу, разрешения для всех каталогов верны во всех аспектах.
  • Каталоги журналов (я помещаю их повсюду, на всякий случай) созданы и представлены всем, у кого есть доступ для записи, а web.config:
    <aspNetCore processPath=".\MyApp.exe" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
  • Я тестировал как .UseKestrel (), так и не в Program.cs

Тот факт, что я могу запустить его и запустить с помощью dotnet myapp.dll, говорит мне, что с самим приложением все в порядке.

Есть ли способ получить некоторые журналы или лучшую страницу 500 внутренних ошибок? НИЧЕГО нет ни в журналах событий Windows, ни в журналах W3C, ни в каком-либо каталоге. \ Logs. Просто проклятые 500 внутренних ошибок, которые не дают ключа к разгадке реальной проблемы.

Буду бесконечно благодарен за несколько мудрых предложений.

// Мартин

Приложение, класс Startup с рядом комментариев, которые появлялись и исчезали во время тестирования:

   public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddTransient<AppDb>(_ => new AppDb(Configuration["ConnectionStrings:validAndWorkingString"]));
            services.AddDistributedMemoryCache();

            services.AddSession(options =>
            {
                options.IdleTimeout = TimeSpan.FromSeconds(10);
                options.Cookie.HttpOnly = true;
                options.Cookie.IsEssential = true;
            });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            //if (env.IsDevelopment())
            //{
                app.UseDeveloperExceptionPage();
            //}
            //else
            //{
            //    app.UseExceptionHandler("/Home/Error");
            //    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            //    app.UseHsts();
            //}
            app.UseSession();
            // app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }

И FWIW класс Program, в котором я тестировал использование бота Kestrel, а не с таким же поведением:

   public class Program
    {
        public static void Main(string[] args)
        {
            bool useKestrel = true;
            if (useKestrel)
            {
                var host = new WebHostBuilder()
                    .UseKestrel()
                    .UseContentRoot(Directory.GetCurrentDirectory())
                    .UseIISIntegration()
                    .UseStartup<Startup>()
                    .Build();
                host.Run();
            }
            else
            {
                CreateHostBuilder(args).Build().Run();
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

person WannBo    schedule 25.10.2020    source источник
comment
вы установили stdoutLogEnabled = true в файле web.config?   -  person MestreDosMagros    schedule 26.10.2020
comment
вы можете предоставить свой стартап-класс?   -  person MestreDosMagros    schedule 26.10.2020
comment
Отвечает ли это на ваш вопрос? Хостинг ASP.NET Core - внутренняя ошибка сервера 500   -  person Jim G.    schedule 26.10.2020
comment
@ MestreDosMagros Спасибо за быстрый ответ. Да, я установил stdoutLogEnabled = true. И соединение с БД работает нормально, когда я запускаю его как dotnet myapp.dll. Но стартовая страница - это пассивный html и не использует БД, и я уже терплю неудачу.   -  person WannBo    schedule 26.10.2020
comment
Журнал системных событий - это то, что вы можете проверить дальше. Создайте быстрый отчет, и он должен выявить другие возможные причины, docs.jexusmanager.com/tutorials/ ancm-diagnostics.html   -  person Lex Li    schedule 26.10.2020
comment
Журнал системных событий НИЧЕГО не показывает, как я сказал в тексте выше. Нада. Я даже очистил все возможные журналы и перезапустился, чтобы ничего не пропустить. Но нет никакого журнала, который дал бы ключ к разгадке.   -  person WannBo    schedule 26.10.2020
comment
Вы пробовали запустить это в Visual Studio в режиме выпуска, чтобы проверить, работает ли он?   -  person MestreDosMagros    schedule 26.10.2020
comment
Да, спасибо. Оба режима Release и Debug (я тестировал всевозможные альтернативы уже 8 часов ...)   -  person WannBo    schedule 26.10.2020
comment
Что ж, я не могу сильно помочь в этом случае, но в этом случае я бы начал удалять вещи из автозагрузки и класса программы, чтобы увидеть, запускается ли он после удаления чего-либо, а затем начать искать решения для этого случая, начиная с этого строка: .UseContentRoot (Directory.GetCurrentDirectory ()), у меня уже были проблемы с этим :)   -  person MestreDosMagros    schedule 26.10.2020
comment
Очень часто appsettings.production.json выдает ошибку 500. Я настоятельно рекомендую перепроверить этот файл. Для начала откройте этот производственный файл в VS. Он покажет синтаксические ошибки.   -  person Serge    schedule 26.10.2020
comment
и для своего контекста EF я использую что-то вроде этого: services.AddDbContext ‹BaseDbContext› (options = ›options.UseSqlServer (Configuration.GetConnectionString (DefaultConnection))); services.AddDbContext ‹UserContext› ();   -  person Serge    schedule 26.10.2020
comment
Прежде всего, вы должны убедиться, что у вас есть разрешение на работу. \ Logs \ stdout. Вы также можете использовать правила отслеживания неудачных запросов в IIS для отслеживания запросов и просмотра записей. Насколько мне известно, формат строки подключения к базе данных может вызывать ошибку 500. Каков формат строки подключения к вашей базе данных?   -  person Ding Peng    schedule 26.10.2020


Ответы (1)


Спасибо Гуру за любезную помощь и предложения!

Как всегда, решение оказалось проще, чем ожидалось.

При публикации я использую команду «Удалить все файлы», чтобы убедиться, что это чистая установка. Я не понимал, что эта публикация удалила весь каталог приложения, а затем воссоздала его снова. По неизвестной причине родительский каталог приложения потерял разрешение IIS_IUSRS, и поэтому автоматически (!) Созданный каталог приложения никогда не унаследовал необходимые разрешения. Разрешения, которые я изначально тщательно настраивал.

Спасибо!

person WannBo    schedule 26.10.2020