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

时间:2017-06-15 12:38:47

标签: c# iis asp.net-core

我尝试在本地计算机上的IIS中托管ASP.NET Core应用程序,并且我收到502.5错误。 我的问题是来自"ASP.NET Core 1.0 on IIS error 502.5" 不同,因为我发布我的应用,但是(出于测试目的)尝试在我的开发机上有IIS(不是快递)提供应用程序。

重现:

  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. 添加一个&#34; Web配置文件&#34;到项目的根源
  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. 选择&#34;添加网站&#34;,选择名称和端口,设置web.config所在文件夹的路径
  9. 根据Microsoft's instructions设置应用程序池&#34; .NET CLR版本&#34; to&#34; No Managed Code&#34;
  10. 浏览到您的新应用,例如http://localhost:8089/api/values

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

  11. 我试图将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项目的文件夹,它只会工作&#34;。

    要使这与ASP.NET Core一起使用,您需要做什么?是否有可能在没有发布的情况下使这个流程工作?

5 个答案:

答案 0 :(得分:2)

  

要使用ASP.NET Core

,您需要做什么?

执行all required instructions,不仅是您喜欢的部分。你应该做出版。

  

是否有可能在没有发布的情况下使这个流程正常工作?

没有

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

答案 1 :(得分:0)

正如@Dmitry所说,我不确定您是否可以在未发布的&#39;上插入IIS。文件夹,但还有更多内容,如https://docs.microsoft.com/en-us/aspnet/core/publishing/iis中所述,您需要一个模块来启用IIS以将其自身插入ASP.NET Core模块,该模块称为“.NET Core Windows Server Hosting&#34;你安装好了吗?

答案 2 :(得分:0)

您可以使用Visual Studio 15.3和更新的名为Development time IIS support的新功能。

请参阅related issueblog post了解新功能。

答案 3 :(得分:0)

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

  1. 创建一个新的dotnet应用。例如,运行&#39; dotnet new react -o my-new-app&#39;来自tutorial。按照指示运行npm install。

  2. 安装AspNetCoreModule

  3. 在IIS中创建一个没有托管代码的新站点,并将App Pool设置为在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>
    
  5. 从那里AspNetCoreModule协调IIS和dotnet.exe之间的交互,并设置反向代理。作为奖励,所有webpack编译,捆绑和热重新加载都像使用“dotnet run”一样工作。

答案 4 :(得分:0)

由于我只是刚刚开始使用ASP.NET Core,所以我不确定自上次回答以来是否有任何变化,但请参阅@Sнаđошƒаӽ的回答here。它只对我适用于ASP.NET Core 3.1。

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