web-dev-qa-db-ja.com

HTTPエラー500.35-ANCM複数のインプロセスアプリケーションが同じプロセスにあるASP.NET Core 3

今朝から、プロジェクトのコードを変更せずに、非常にシンプルなWeb API、1つのコントローラー、3つのメソッド、Swaggerを使用すると、起動しなくなり、エラーが発生します。

HTTPエラー500.35-同じプロセス内のANCM複数のインプロセスアプリケーション

イベントビューアは、最も役に立たないメッセージを報告します。

IIS Express AspNetCoreモジュールV2:アプリケーション '/ LM/W3SVC/2/ROOT/docs'の開始に失敗しました、エラーコード '0x80004005'。

システムを数回再起動した。

私はVisual Studio 2019を使用していますが、アプリケーションは正常にコンパイルされ、数分前に問題なく動作しました。新しいソフトウェアはインストールされておらず、パッケージは追加されていません。クリーンとリビルドも試みました。

メソッドのコメントを変更しました。もちろん、以前のコメントも復元しようとしましたが、常に同じメッセージが表示されます。

私に何ができる?

ネットコアはまだ不安定すぎて専門的に使用できませんか?

[〜#〜]更新[〜#〜]

同じバージョンのVisual Studioから起動された同じコードが別のPCで正しく実行されます。

更新2

アプリケーションのコードの下:

startup.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;
using System;
using System.IO;
using System.Reflection;

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

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {

            services.AddControllers(); 
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo() { Title = "Geographic APIs", Version = "v1.0.0" });
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.XML";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);    
                c.IncludeXmlComments(xmlPath);
            });
        }

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

            app.UseStaticFiles(new StaticFileOptions
            {
                FileProvider = new PhysicalFileProvider(
                 Path.Combine(Directory.GetCurrentDirectory(), "swagger-ui")),
                RequestPath = "/swagger-ui"
            });

            app.UseHttpsRedirection();
            app.UseRouting();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });

            app.UseSwagger();    
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "GeoAPIs Ver 1.0.0");
                c.RoutePrefix = "docs";
                c.InjectStylesheet("/swagger-ui/custom.css");
            });
        }
    }
}

Launchsettings.jsonは次のとおりです。

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:51319",
      "sslPort": 44345
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "docs",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "WFP_GeoAPIs": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "docs",
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

しかし、同じVisual Studioバージョンを持つ別のPCでプロジェクトをコピーすると問題なく機能するため、.NET CoreまたはVIsual Studioプロパティの構成バグのようです...

26
Giox

@ Lex Li のおかげで、彼は私に解決策を与えてくれました。

問題はapplicationhost.configにありました。これは、Webアプリケーションを実行するためにVisual StudioがIISExpressを起動するためのすべての設定を含むメタベースファイルです。

Visual Studio 2019の場合、このファイルは次の場所にあります

$(solutionDir)\.vs\{projectName}\config\applicationhost.config

他のバージョンについては、この投稿を確認してください: IIS Express configuration/metabase file found?

セクションの下に私は次のようにしました:

<sites>    
  <site name="WebSite1" id="1" serverAutoStart="true">
    <application path="/">
      <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
    </application>
    <bindings>
      <binding protocol="http" bindingInformation=":8080:localhost" />
    </bindings>
  </site>

  <site name="MyProjectName" id="2">
    <application path="/" applicationPool="MyProjectName AppPool">
      <virtualDirectory path="/" physicalPath="E:\Projects\MyProjectName" />
    </application>

   <application path="/docs" applicationPool="docs AppPool">
      <virtualDirectory path="/" physicalPath="E:\Projects\MyProjectName" />
    </application>

    <bindings>
      <binding protocol="http" bindingInformation="*:59386:localhost" />
      <binding protocol="https" bindingInformation="*:44345:localhost" />
    </bindings>
  </site>
  <siteDefaults>
    <!-- To enable logging, please change the below attribute "enabled" to "true" -->
    <logFile logFormat="W3C" directory="%AppData%\Microsoft\IISExpressLogs" enabled="false" />
    <traceFailedRequestsLogging directory="%AppData%\Microsoft" enabled="false" maxLogFileSizeKB="1024" />
  </siteDefaults>
  <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
  <virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>

によって定義されたいくつかの奇妙な設定があるところ

<application path="/docs" applicationPool="docs AppPool">
   <virtualDirectory path="/" physicalPath="E:\Projects\MyProjectName" />
</application> 

これは、/ docsパスを開始フォルダとして設定しようとしたときに確かに追加されました。

このパスに関連するファイルの最後にあるこの設定と別の設定をコメントアウトすると、問題が解決しました。

23
Giox
34
Legends

以下を実行したときにも同じエラーが発生しました。

  1. 2つの別個のasp.netコアWebサイトを公開
  2. IISでは、「Default Web Site」の下に2つのWebサイトを作成し、それぞれに(1)の各発行フォルダーへの物理パスを設定しました。
  3. ここで、最初に開いたサイトはどれでも機能し、2番目のサイトではそのエラーが発生します。

問題:

私のサイトは両方とも「Default Web Site」の下にあるため、どちらもDefaultAppPoolを使用しています。これがこのエラーの原因です。サイトが[既定のWebサイト]にないが同じアプリプールを使用している場合にも、同じエラーが発生します。

ソリューション:

docs で述べたように、

このエラーを修正するには、別のIISアプリケーションプールでアプリを実行します。

私にとってこの問題は、サイトごとに個別のアプリプールを使い始めたときに解決されました。

15