【问题标题】:HTTP Error 500.35 - ANCM Multiple In-Process Applications in same Process ASP.NET Core 3HTTP 错误 500.35 - 同一进程 ASP.NET Core 3 中的 ANCM 多个进程内应用程序
【发布时间】:2020-02-03 09:46:40
【问题描述】:

从今天早上开始,项目代码没有任何变化,一个非常简单的Web API,一个控制器和3个方法,用Swagger,它不再启动了,我得到了错误:

HTTP 错误 500.35 - 同一进程中的 ANCM 多个进程内应用程序

事件查看器报告最无用的消息:

IIS Express AspNetCore Module V2:无法启动应用程序 '/LM/W3SVC/2/ROOT/docs',错误代码'0x80004005'。

多次重启系统。

我正在使用 Visual Studio 2019,应用程序成功编译,几分钟前它运行良好。没有安装新软件,没有添加任何软件包。 也尝试过清理和重建。

我刚刚修改了一个方法的注释。显然,我也尝试过恢复之前的评论,但我总是收到相同的消息。

我能做什么?

net core 还是太不稳定而不能专业使用吗?

更新

从相同版本的 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 属性中的配置错误...

【问题讨论】:

  • .NET Core 已被许多开发人员用于生产环境,包括 Microsoft 本身。它非常稳定。问题就在你身边。但是,这里不足以帮助您。查看文档中的故障排除指南。
  • 我遇到了同样的错误。你在使用 web.config 吗?
  • 我愿意,我通过在 web.config 中将 AspNetCoreModuleV2 更改为 AspNetCoreModule 来修复我的问题。
  • 您需要查看 VS/IIS Express 使用的实际配置文件,看看是否有两个 .NET Core 应用程序错误地进入同一个池。进程内模型无法支持。
  • @Chris :他们对这种互动感到沮丧是有道理的,IMO。我使用项目设置 -> 调试 UI 触摸了我的项目启动设置。我编辑了错误的东西(也是 IMO),因为 UI 存在缺陷,并且“应用程序 URL”很容易被误认为是“启动浏览器”设置。 更糟,我恢复了我的更改,但问题仍然存在于我从未接触过的文件中(下文讨论)。清理和重建不会修复该文件。删除配置不会修复文件。删除 .vs 文件夹确实解决了它,但在此过程中删除了调试器和其他个性化设置。

标签: c# asp.net-core


【解决方案1】:

目前是 VS2019 中的 bug -(2019 年 11 月 4 日)

1.)关闭您的解决方案

2.) 删除文件夹.vs 中的applicationhost.config 删除整个.vs 文件夹。

.vs 文件夹是一个隐藏文件夹,通常位于您的解决方案文件旁边。

3.) 重新启动您的解决方案

【讨论】:

  • 谢谢,这样就省去了翻遍 applicationhost.config 的麻烦。
  • 为我修复了它。这似乎解决了很多类似的问题...
  • 我的英雄!这困扰了我好几天!
  • 对我来说略有不同:我首先在 Windows 资源管理器中搜索了 applicationhost.config。然后关闭 Visual Studio。注意到文件自动删除。重新启动VS并再次工作。另请注意,.vs 文件夹是一个隐藏文件夹。
  • 在 2020 年 12 月仍然是一个错误,这仍然修复了它。谢谢。
【解决方案2】:

感谢@Lex Li他给了我解决方案。

问题出在 applicationhost.config 中,该配置数据库文件包含 Visual Studio 启动 IISExpress 以运行 Web 应用程序的所有设置。

对于 Visual Studio 2019,此文件位于

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

对于其他版本,请查看此帖子:Where is the 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 路径设置为起始文件夹时,这肯定是添加的。

注释掉这个设置和文件末尾与这个路径相关的另一个设置已经解决了这个问题。

【讨论】:

  • 你是救命稻草! +1 我刚刚为我的项目删除了 .vs 文件夹,现在它正在工作(解决方案和项目的文件夹)谢谢
  • 我遇到了同样的问题,这解决了它,但是,我注意到当我在 launchSettings.json 中修改 iisExpress 下的“applicationUrl”属性时,VS 自动添加了第二个条目。不知道为什么会发生这种情况。
  • @Richie 这似乎是 VS 的一个错误。当您更改 URL 时,它不会删除较旧的应用程序,它应该在应用程序在进程内运行时删除。这里有一个报告:developercommunity.visualstudio.com/content/problem/699245/…。让我们看看它是否没有作为较低优先级关闭。
  • 刚刚在 2022 年 1 月的 VS2022 上遇到了这个问题,删除了 .vs/config/applicationhost.config 并重新启动 VS 修复了它。
【解决方案3】:

我在执行以下操作时遇到了同样的错误:

  1. 发布了两个独立的 asp.net 核心网站
  2. 在 IIS 中,在“默认网站”下创建了两个网站,每个网站的物理路径分别设置为 (1) 中的每个发布文件夹。
  3. 现在,我首先打开的网站中的任何一个都可以正常工作,而第二个网站则会出现该错误。

问题:

由于我的两个站点都在“默认网站”下,它们都使用 DefaultAppPool,这是导致此错误的原因。当站点不在“默认网站”下但使用相同的应用程序池时,也会发生同样的错误。

解决方案:

正如docs中提到的,

要修复此错误,请在单独的 IIS 应用程序池中运行应用程序。

对我来说,当我开始为每个站点使用单独的应用程序池时,这个问题得到了解决。

【讨论】:

  • 我使用的主机只提供一个应用程序池。有没有办法在同一个应用程序池中运行两个核心站点?
  • 您应该能够将两个核心站点设置为使用相同的应用程序池。快速搜索应该会给你很多文章。 Here's one.
  • 我可以通过使用进程外模式解决这个问题。这允许在同一个应用程序池中托管两者
【解决方案4】:

我通过删除发布解决方案后生成的 web.config 文件中的 V2 来解决此问题。

<handlers>
    <add name="aspNetCore" path="*" verb="*" 
        modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>

而不是

<handlers>
    <add name="aspNetCore" path="*" verb="*"
        modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>

【讨论】:

  • 这对我来说是完美的解决方案
  • 最简单的解决方案。
  • 节省了很多时间。
  • 截至 2021 年 4 月,此问题仍然存在。这对我有用。
  • 编辑最后一条评论:使用 WebDeploy,它会覆盖服务器上的内容,我必须进入服务器并删除 V2。非常烦人,尤其是在那些我的笨蛋忘记了 10 件事,然后一次记住一件,我必须继续重新发布的时候。
【解决方案5】:

我遇到了同样的问题。

在 .csproj 文件的 Tag 中添加这一行: &lt;AspNetCoreHostingModel&gt;OutOfProcess&lt;/AspNetCoreHostingModel>

虽然是 500.30 错误,但它也修复了 500.35 问题。

HTTP Error 500.30 - ANCM In-Process Start Failure

希望对你有帮助。

最好的问候。

【讨论】:

    【解决方案6】:

    .csproj 文件中,设置:

    <PropertyGroup>
       ...
       <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
    </PropertyGroup>
    

    允许托管同一个池

    【讨论】:

      【解决方案7】:

      如果您在将应用程序部署到服务器(内部或第 3 方托管服务提供商)后看到此错误(HTTP 错误 500.35 - 同一进程 ASP.NET Core 3 中的多个进程内应用程序),则可能是相关的模块未安装在主机服务器上。

      就我而言,它没有 AspNetCoreModuleV2,我必须从以下位置更新 web.config:

      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      

      到:

      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      

      或者,也可以在 .csproj 文件中进行如下设置:

      <PropertyGroup>
          <AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
      </PropertyGroup>
      

      【讨论】:

        【解决方案8】:

        对我来说最简单可靠的想法是,只需简单地将一个简单的 index.html 放在主应用程序中,并将解决方案中的每个应用程序都视为子应用程序。

        【讨论】:

          【解决方案9】:

          在我的情况下,它只是将应用程序池切换到 .NET v2.0

          【讨论】:

            【解决方案10】:

            enter image description here

            在 Web.config 中从 inprocess 更改为 OutOfprocess

            【讨论】:

            • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
            【解决方案11】:

            .csproj文件中可以添加OutOfProcess

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

            这将在web.config 中生成这个(发布时):

            <configuration>
              <location path="." inheritInChildApplications="false">
                <system.webServer>
                  <handlers>
                    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
                  </handlers>
                  <aspNetCore processPath="dotnet" arguments=".\WebApplication3.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess" />
                </system.webServer>
              </location>
            </configuration>
            

            注意OutOfProcess

            另一种方法是从 web.config 中删除 V2

            【讨论】:

              猜你喜欢
              • 2020-08-23
              • 2019-06-12
              • 1970-01-01
              • 2019-07-08
              • 2020-02-14
              • 1970-01-01
              • 2021-08-24
              • 2019-08-25
              • 1970-01-01
              相关资源
              最近更新 更多