Kestrel服务器已经启动

时间:2019-11-05 12:06:29

标签: c# asp.net-core iis-express .net-core-3.0 kestrel

使用.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.Private.CoreLib.dll中的'System.InvalidOperationException'

更新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进程。此过程可以在 UPDATE 2

之后的5分钟内终止

我的假设是,在从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";
        });
    }

0 个答案:

没有答案