Кестрел сервер уже запущен - PullRequest
0 голосов
/ 05 ноября 2019

При запуске приложения .net core 3.0.100 с IIS Express: enter image description here я получаю следующую ошибку.

Необработанное исключение. System.InvalidOperationException: сервер уже запущен.

Также та же ошибка при запуске из командной строки: dotnet run -w

Этот код запуска, который создает hostBuilder и запускает приложение

private static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .UseServiceProviderFactory(new AutofacServiceProviderFactory())
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder
                .UseStartup<Startup>()
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.SetMinimumLevel(LogLevel.Trace);
                })
                .UseNLog();
        });

public static void Main(string[] args) => CreateHostBuilder(args).Build().Run(); // errors throws here

Я предполагаю, что ошибка означает, что сервер уже запущен :) Но я понятия не имею, когда он был запущен?

ОБНОВЛЕНИЕ 1

При исследовании журнала IIS была обнаружена следующая библиотека, которая вызвала исключение:

Возникло исключение: 'System.InvalidOperationException' в System.Private.CoreLib.dll

ОБНОВЛЕНИЕ 2

После запуска dotnet run я вижу много порожденных процессов dotnet: enter image description here

Я могу убить их всех, но когдаЯ убиваю последний (выделенный красным), он немедленно перезагружается с другим PID. И если я попытаюсь сделать dotnet run после того, как я убил столько, сколько смогу, по-прежнему возникает та же ошибка.

Если подождать около 5 минут, то я могу убить даже последний процесс, но все равно не могуdotnet run

ОБНОВЛЕНИЕ 3

Попытка

dotnet build-server shutdown
dotnet run

Результат тот же

ОБНОВЛЕНИЕ 4

Пробовал dotnet <build-result-name>.dll

По-прежнему имеет ту же ошибку, но знаю, что только один dotnet.exe процесс был порожден. Этот процесс, который можно убить за 5 минут из UPDATE 2

Мои предположения, что каким-то образом сервер kestrel был запущен до StartAsync от kestrel, но мне не хватает, когда и как.

ОБНОВЛЕНИЕ 5

Список кодов для запуска

    public void ConfigureServices(IServiceCollection services)
    {
        services
            .AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "wwwroot";
            });

        services
            .AddLocalizationOptions(Configuration)
            .AddHttpContextAccessor()
            .AddSingleton<IActionContextAccessor, ActionContextAccessor>()
            .AddSecurityAuthentication(
                this.Configuration,
                options => options
                    .UseUserModel<User>()
                    .AddUserService<UserService>()
                    .AddSecurityJwtAuthentication())
            .AddAuthorization()
            .AddLogging(builder => builder
                .AddConfiguration(Configuration)
                .AddConsole()
                .AddNLog())
            .AddMvcCore()
            .AddControllersAsServices()
            .AddCustomJsonOptions(this.hostingEnvironment)
            .AddCustomCors();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        // If, for some reason, you need a reference to the built container, you
        // can use the convenience extension method GetAutofacRoot.
        this.AutofacContainer = app.ApplicationServices.GetAutofacRoot();

        app
            .UseRequestLocalization(
                RequestLocalizationConfigurator.GetRequestLocalizationOptions(app.ApplicationServices))
            .UseHttpsRedirection()
            .UseMiddleware<SpaRoutingMiddleware>()
            .UseStaticFiles()
            .UseMiddleware<ExceptionHandlingMiddleware>()
            .UseRouting()
            .UseCors(CorsPolicyName.AllowAny)
            .UseAuthentication()
            .UseAuthorization()
            .UseEndpoints(endpoints =>
            {
                endpoints.MapControllers().RequireAuthorization();
            });

        app.UseSpaStaticFiles();
        app.UseSpa(spa =>
        {
            spa.Options.SourcePath = "../../../../client";
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...