我尝试在本地计算机上的IIS中托管ASP.NET Core应用程序,并且我收到502.5
错误。 我的问题是来自"ASP.NET Core 1.0 on IIS error 502.5" 的不同,因为我不发布我的应用,但是(出于测试目的)尝试在我的开发机上有IIS(不是快递)提供应用程序。
重现:
ASP.NET Core Web Application (.NET Core)
选择" 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>
按F5运行并localhost:6565/api/values
打开
取消注释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>
打开IIS管理器GUI
web.config
所在文件夹的路径浏览到您的新应用,例如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
或其位置使用.NET Framework上的ASP.NET MVC应用程序,你可以在完整的IIS中启动一个新的网站,指向MVC项目的文件夹,它只会工作&#34;。
要使这与ASP.NET Core一起使用,您需要做什么?是否有可能在没有发布的情况下使这个流程工作?
答案 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 issue和blog post了解新功能。
答案 3 :(得分:0)
我能够让ASP.Net Core 2在开发模式下运行在IIS后面。
创建一个新的dotnet应用。例如,运行&#39; dotnet new react -o my-new-app
&#39;来自tutorial。按照指示运行npm install。
在IIS中创建一个没有托管代码的新站点,并将App Pool设置为在LocalSystem下运行。它需要这个写入C:\ WINDOWS \ system32 \ config \ systemprofile。设置从步骤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”一样工作。
答案 4 :(得分:0)