在完整的IIS中运行ASP.NET Core应用程序而不发布,会出现502.5错误

kx7yvsdv  于 2023-11-19  发布在  .NET
关注(0)|答案(6)|浏览(188)

我试图在我的本地机器上的IIS中托管ASP.NET Core应用程序,我得到了一个502.5错误。**我的问题与"ASP.NET Core 1.0 on IIS error 502.5"**不同,因为我 * 不是 * 发布我的应用程序,而是(出于测试目的)试图让我的开发机器上的IIS(而不是express)提供应用程序。
复制:
1.打开VS 2017
1.创建新的ASP.NET Core Web Application (.NET Core)
1.选择“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>


1.按F5运行,localhost:6565/api/values打开
1.将“Web配置文件”添加到项目的根目录
1.取消注解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>


1.打开IIS管理器GUI
1.选择“添加网站”,选择名称和端口,设置web.config所在文件夹的路径
1.根据Microsoft's instructions,将应用程序池的“.NET版本”设置为“无托管代码”
1.浏览到新应用程序,例如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应用程序,您可以在指向MVC项目文件夹的完整IIS中启动一个新网站,并且它会“正常工作”。
你需要做些什么才能让它在ASP.NET Core中工作?有没有可能在不发布的情况下让这个流工作?

lf3rwulv

lf3rwulv1#

我遵循@Jim Lowrey的回答,并遵循一些额外的步骤:

  • 安装了“开发时间IIS支持”
  • 我在使用.net6时安装了Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 6.0.24版
  • 安装dotnet-hosting-6.0.24-win.exe注意:在我的Windows 10中,我安装了SDK .net 6和.net 7。
mbyulnm0

mbyulnm02#

你需要做些什么才能让它与ASP.NETCore一起工作
执行all required instructions,不仅是你喜欢的部分。你应该做发布。
有没有可能在不发布的情况下让这个流程工作?

在发布过程中,您的项目会被编译,您的web.config会被修改以运行编译后的应用程序(没有SDK)。

laximzn5

laximzn53#

您可以使用Visual Studio 15.3及更新版本的新功能Development time IIS support
请参阅related issueblog post的新功能。

khbbv19g

khbbv19g4#

我能够让ASP.NetCore2在IIS后面以开发模式运行。
1.建立新的. net应用程序。例如,从tutorial执行'dotnet new react -o my-new-app'。请依照指示执行npm install。
1.安装AspNetCoreModule。“
1.在IIS中,建立不含Managed程式码的新网站,并将应用程序集区设定为在LocalSystem下执行。写入C:\WINDOWS\system32\config\systemprofile时需要此设定。请将实体路径设定为步骤1所建立的目录。
1.将下面的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”中所做的那样。

eit6fx6z

eit6fx6z5#

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

wsxa1bj1

wsxa1bj16#

我不确定是否有什么改变,因为我刚刚开始使用ASP.NET Core,但请参阅@Sна н а т о н а н的答案here。它只是为我在ASP.NET Core 3.1工作。
请注意,如果不生成或发布,cshtml文件中的更改将不会反映出来。要获取Razor文件的运行时编译,以便在页面刷新后显示更改,请按照here的说明使用Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation。

相关问题