web-dev-qa-db-ja.com

ASP.NET Core 3.1-HTTPエラー500.30-ANCMインプロセス開始エラー

3.1バージョンを使用してネットコアWeb APIを構成しています。私はすでにこの質問をここで確認しましたが、私のケースではどの回答も機能しませんでした。

ネットコアバージョン3.1でWeb APIを構成しようとしています。似た設定と同じバージョンのパッケージを持つ別のアプリは、私のPC上の同じiisエクスプレスでも同様に機能します。

これが私のStartup.csです

public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public IConfiguration Configuration { get; }
        readonly string AllowSpecificOrigins = "_allowSpecificOrigins";


        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
            {
                options.AddPolicy(AllowSpecificOrigins,
                builder =>
                {
                    builder.AllowCredentials().AllowAnyMethod().AllowAnyHeader().WithOrigins("http://localhost:4200");
                });
            });

            services.AddControllers()
                .AddNewtonsoftJson();

            services.AddScoped<IAccountRepository, AccountRepository>();
            services.AddScoped<IDocsRepository, DocsRepository>();

            services.AddDbContext<LibContext>(options =>
                options.UseNpgsql(Configuration.GetConnectionString("LibraryDatabase"), x => x.UseNetTopologySuite()));

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    options.RequireHttpsMetadata = false; 
                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateIssuer = true,
                        ValidIssuer = AuthOptions.ISSUER,
                        ValidateAudience = true,
                        ValidAudience = AuthOptions.AUDIENCE,
                        ValidateLifetime = true,
                        IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),
                        ValidateIssuerSigningKey = true
                    };                  
                });
            services.AddIdentity<ApplicationUser, IdentityRole>(options =>
            {
                //password settings
                options.Password.RequiredLength = 8;
                options.Password.RequireNonAlphanumeric = false;

                options.User.RequireUniqueEmail = true;

                //lockout settings
                options.Lockout.AllowedForNewUsers = true;
                options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
                options.Lockout.MaxFailedAccessAttempts = 5;
            })
                .AddEntityFrameworkStores<LibContext>()
                .AddUserManager<UserManager<ApplicationUser>>()
                .AddDefaultTokenProviders();

            services.AddSignalR();

        }


        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseCors(AllowSpecificOrigins); //DEV MODE!           
            app.UseStaticFiles();
            app.UseStaticFiles(new StaticFileOptions()
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"Library")),
                RequestPath = new PathString("/Library")
            });
            app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();                
            });
        }
    }

appsettings.jsonにタイプミスがないようです

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "LibraryDatabase": "Host=localhost;Port=5432;Database=librarydb;Username=postgres;Password=mypasshere"
  }
}

私のapp.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="Library\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.3" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.3" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.3" />
    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.2.0" />
    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="2.2.0" />
    <PackageReference Include="ProjNET4GeoAPI" Version="1.4.1" />
  </ItemGroup>


</Project>

イベントビューアは2つのエラーをスローしますが、何が問題なのかわかりません。エラー:

物理ルート 'my app folder'のアプリケーション '/ LM/W3SVC/2/ROOT'は、終了コード= '0'でProgram.Mainを終了しました。キャプチャされたstdoutおよびstderrログの最初の30K​​B文字:プログラムが開始します

物理ルートが 'my app folder'のアプリケーション '/ LM/W3SVC/2/ROOT'は、coreclrのロードに失敗しました。例外メッセージ:CLRワーカースレッドが途中で終了しました

御時間ありがとうございます

2
Mateech

わかりました、私は答えを見つけたと思います。私の場合はうまくいきました!

この設定ではなくプログラムmain.csで興味深い問題があり、問題はありませんでした。このエラーが発生するケースはいくつかあります

Case1-他のコアバージョンから.net core 3.1への移行中。 IHostBuilderでkestrelを使用する。これを使わないで

            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.ConfigureKestrel(serverOptions =>
                    {
                        //..
                    })
                    .UseStartup<Startup>();
                })
            .Build();

代わりにこのスタイルを使用してください。 (CreateHostBuilder

            var Host = CreateHostBuilder(args).UseServiceProviderFactory(new AutofacServiceProviderFactory()).Build();
            Host.Run();

// ..

public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
    webBuilder.ConfigureKestrel(serverOptions =>
    {
        serverOptions.Limits.MaxConcurrentConnections = 100;
        serverOptions.Limits.MaxConcurrentUpgradedConnections = 100;
        serverOptions.Limits.MaxRequestBodySize = 10 * 1024;
        serverOptions.Limits.MinRequestBodyDataRate =
            new MinDataRate(bytesPerSecond: 100,
                gracePeriod: TimeSpan.FromSeconds(10));
        serverOptions.Limits.MinResponseDataRate =
            new MinDataRate(bytesPerSecond: 100,
                gracePeriod: TimeSpan.FromSeconds(10));
        serverOptions.Limits.KeepAliveTimeout =
            TimeSpan.FromMinutes(2);
        serverOptions.Limits.RequestHeadersTimeout =
            TimeSpan.FromMinutes(1);
    })
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseIISIntegration()
    .UseStartup<Startup>();
});

ケース2- Program.csはロガーファイルまたは構成ファイルを見つけることができませんでした。フォルダファイルのアクセス許可などに到達できなかった可能性があります。main関数のtry catchで確認してください。

ケース3- InProcessモードのAspNetCoreModuleV2が構成されていないか、正しく構成されていません

通常、1はこのエラーの正しいケースですが、2および3に関心があります

1
Hamit YILDIRIM