在运行iis 10的Windows Server 2016数据中心上托管asp.net核心mvc应用程序时,该应用程序无法加载,并显示消息HTTP错误500.30-ANCM进程内启动失败
尽管我在服务器上安装了.net core 2.2.3,但我还是使用.net core 2.2和vs 2017.9创建了该应用程序。
在服务器上:
C:\ Users \ user1> dotnet --info
.NET Core SDK(反映任何global.json): 版本:2.2.105 提交:7cecb35b92
运行时环境: 操作系统名称:Windows 操作系统版本:10.0.14393 操作系统平台:Windows RID:win10-x64 基本路径:C:\ Program Files \ dotnet \ sdk \ 2.2.105 \
主机(可用于支持): 版本:2.2.3 提交:6b8ad509b6
.NET Core SDK已安装: 2.1.4 [C:\ Program Files \ dotnet \ sdk] 2.2.105 [C:\ Program Files \ dotnet \ sdk]
.NET Core运行时已安装: Microsoft.AspNetCore.All 2.2.3 [C:\ Program Files \ dotnet \ shared \ Microsoft.AspNetCore.All] Microsoft.AspNetCore.App 2.2.3 [C:\ Program Files \ dotnet \ shared \ Microsoft.AspNetCore.App] Microsoft.NETCore.App 2.0.5 [C:\ Program Files \ dotnet \ shared \ Microsoft.NETCore.App] Microsoft.NETCore.App 2.0.7 [C:\ Program Files \ dotnet \ shared \ Microsoft.NETCore.App] Microsoft.NETCore.App 2.2.3 [C:\ Program Files \ dotnet \ shared \ Microsoft.NETCore.App]
要安装其他.NET Core运行时或SDK,请执行以下操作: https://aka.ms/dotnet-download
Windows应用程序事件日志显示:
具有物理根目录'C:\ inetpub \ wwwroot \ healthmonitormvc \'的应用程序'/ LM / W3SVC / 3 / ROOT'无法加载clr和托管应用程序。意外的异常:HRESULT 0x800700b7在c:\ b \ w \ da744fbcc13abce \ src \ servers \ iis \ aspnetcoremodulev2 \ inprocessrequesthandler \ inprocessapplication.cpp:198
中返回
GitHub上有几个关于此错误和结果的线程,但没有解决方案。
相同的代码在本地iis上有效。 myapp.exe也将加载(dotnet myapp.dll也是如此)。因此这似乎是一个iis配置问题(或GitHub上指出的.net核心缺陷,这意味着我可能正在寻求解决方法)。 stdout文件已创建,但没有内容。
该项目是非核心项目解决方案的一部分。但是,我使用vs Web Publisher发布了该项目,该项目按预期运行。
一个stackoverflow线程建议更改为OutOfProcess作为托管模型,但我不想用在过程外。它也无法以相同的结果加载。可能是.net 2.2.3被严重破坏的情况。但是由于我可以在本地运行它,所以存在一个可以正常工作的配置。
这是应用程序的web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\my.name.space.HealthMonitor.Mvc.exe" arguments="exec ".\my.anme.space.HealthMonitor.Mvc.dll"" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
<system.web>
<compilation targetFramework="netcoreapp2.2" />
</system.web>
</configuration>
我希望该页面能够像在iisexpress或iis local中一样加载,在其中显示默认的即用型页面。
答案 0 :(得分:2)
我们遇到了完全相同的问题,并删除了对我们有用的环境变量。 原因是我们在iis和web.config中都设置了相同的环境变量。
我的客人是 builder.AddEnvironmentVariable()在构建IConfiguration时抛出重复的键异常。
要检查您的iis环境变量,请转到您的站点, ConfigurationEditor ->选择顶部部分的 system.webServer / aspNetCore < / p>
希望这有助于清除一些疑问
答案 1 :(得分:2)
我遇到了同样的问题,发现在 Azure App Service 中运行dotnet YourAPI.dll
,请转到:
App Service -> Advanced Tools -> Go (Will take you to Kudu) -> Debug console -> PowerShell
;
然后导航至site/wwwroot
,现在运行:
dotnet YourAPI.dll
。
结果显示了一条详细的错误消息。
答案 2 :(得分:0)
删除环境变量
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="DEVELOPMENT" />
</environmentVariables>
导致页面加载。我不完全理解为什么。显然,我不了解它如何与应用程序交互(尽管我以为是)。
服务器集显示:
>ASPNETCORE_ENVIRONMENT=Development
我确实注意到IIS管理器配置编辑器针对相同的环境变量显示了开发以及我的开发。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace My.Name.Space.HealthMonitor.Mvc
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.Configure<IISServerOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.AutomaticAuthentication = true;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
也许另一个菜鸟会受益。问题已基本解决,并向我表明我需要更好地了解ASPNETCORE_ENVIRONMENT。 欢迎提出建设性意见。