【问题标题】:Running ASP.NET Core application in full IIS without publishing gives 502.5 error在不发布的情况下在完整的 IIS 中运行 ASP.NET Core 应用程序会出现 502.5 错误
【发布时间】:2017-06-15 12:38:47
【问题描述】:

我正在尝试在我的本地计算机上的 IIS 中托管一个 ASP.NET Core 应用程序,但我收到了 502.5 错误。 我的问题与"ASP.NET Core 1.0 on IIS error 502.5"不同,因为我发布我的应用程序,但(出于测试目的)尝试使用 IIS(不是express)在我的开发机器上提供应用程序。

复制:

  1. 打开VS2017
  2. 创建一个新的ASP.NET Core Web Application (.NET Core)
  3. 选择“Web API”模板并定位“ASP.NET Core 1.1”(无身份验证)

    您的Main 现在看起来像这样:

    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseApplicationInsights()
            .Build();
    
        host.Run();
    }
    

    你的 csproj 看起来像这样:

    <Project Sdk="Microsoft.NET.Sdk.Web">
    
      <PropertyGroup>
        <TargetFramework>netcoreapp1.1</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <Folder Include="wwwroot\" />
      </ItemGroup>
      <ItemGroup>
        <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
        <PackageReference Include="Microsoft.AspNetCore" Version="1.1.2" />
        <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />
        <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" />
      </ItemGroup>
      <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" />
      </ItemGroup>
    
    </Project>
    
  4. 按 F5 运行,localhost:6565/api/values 打开

  5. 将“Web 配置文件”添加到项目的根目录
  6. 取消注释 system.webServer 部分,如下所示:

    <system.webServer>
        <handlers>
          <remove name="aspNetCore"/>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
        </handlers>
        <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
    
  7. 打开 IIS 管理器 GUI

  8. 选择“添加网站”,选择名称和端口,设置web.config所在文件夹的路径
  9. 根据Microsoft's instructions 将应用程序池的“.NET CLR 版本”设置为“无托管代码”
  10. 浏览到您的新应用程序,例如http://localhost:8089/api/values

    结果:HTTP 错误 502.5 - 进程失败
    预期:与第 4 步中的结果相同。

我已尝试将the top answer 中提到的所有原因排除在另一个问题中:

  • 为应用池设置LocalSystem 身份
  • 在控制台上检查 dotnet --version 是否运行(即在 PATH 上可用)

此外,我还尝试了其他一些方法:

  • processPath 设置为"%LAUNCHER_PATH%\bin\Debug\netcoreapp1.1\WebApplication1.dll 的变体
  • processPath 设置为指向dotnet.exe 或其位置
  • 重新阅读 the docs 以提炼出实现此目的的方法。

使用 .NET Framework 上的 ASP.NET MVC 应用程序,您只需在完整的 IIS 中启动一个指向 MVC 项目文件夹的新网站,它就会“正常工作”。

您需要做什么才能使其与 ASP.NET Core 一起使用?甚至有可能在不发布的情况下让这个流程正常工作吗?

【问题讨论】:

  • @PranavPatel 我已经在我的问题中解释了为什么它不同,不是吗?我想跳过“发布”步骤,就像使用 ASP.NET 4.6 MVC 应用程序一样。

标签: c# iis asp.net-core


【解决方案1】:

你需要做什么才能让它与 ASP.NET Core 一起工作

执行all required instructions,不仅仅是你喜欢的部分。你应该做发布。

甚至有可能在不发布的情况下让这个流程正常工作吗?

没有。

在发布期间,您的项目被编译,您的 web.config 被修改为运行编译后的应用程序(不带 SDK)。

【讨论】:

    【解决方案2】:

    您可以使用 Visual Studio 15.3 及更高版本的新功能 Development time IIS support

    有关新功能,请参阅related issueblog post

    【讨论】:

      【解决方案3】:

      我能够让 ASP.Net Core 2 在开发模式下在 IIS 后面运行。

      1. 创建一个新的 dotnet 应用程序。例如,从tutorial 运行“dotnet new react -o my-new-app”。按照指示运行 npm install。

      2. 安装AspNetCoreModule

      3. 在 IIS 中创建一个没有托管代码的新站点,并将应用程序池设置为在 LocalSystem 下运行。它将需要它来写入 C:\WINDOWS\system32\config\systemprofile。将物理路径设置为从步骤 1 创建的目录。

      4. 将以下 web.config 放入步骤 1 的目录中。

        <?xml version="1.0" encoding="utf-8"?>
        <configuration>
          <!--
            Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
          -->
          <system.webServer>
            <handlers>
              <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
            </handlers>
            <aspNetCore processPath="C:\Program Files\dotnet\dotnet.exe"
                        arguments="run --project C:\<your-path-to>\my-new-app" 
                        stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
                <environmentVariables>
                  <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
                </environmentVariables>
            </aspNetCore>
          </system.webServer>
        </configuration>
        

      从那里 AspNetCoreModule 协调 IIS 和 dotnet.exe 之间的交互,并设置反向代理。作为奖励,所有 webpack 编译、捆绑和热重载都像使用 'dotnet run' 一样工作。

      【讨论】:

        【解决方案4】:

        正如@Dmitry 所说,我不确定您是否可以将 IIS 插入“未发布”文件夹,但正如https://docs.microsoft.com/en-us/aspnet/core/publishing/iis 中所述,您需要一个模块来启用 IIS 将自己插入名为“.NET Core Windows Server Hosting”的 ASP.NET Core 模块,你安装了吗?

        【讨论】:

          【解决方案5】:

          我不确定自之前的答案以来是否有任何变化,因为我才刚刚开始使用 ASP.NET Core,但请参阅 @Sнаđошƒаӽ 的答案 here。它只适用于 ASP.NET Core 3.1。

          请注意,如果不构建或发布,cshtml 文件中的更改将不会反映。要获得 Razor 文件的运行时编译,以便仅在页面刷新后显示更改,请使用 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation,如 here 所述。

          【讨论】:

            猜你喜欢
            • 2018-08-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多