使用.net core 2.2并使用`In Process`托管模型

问题描述 投票:14回答:7

我正在尝试使用.net core sdk 2.2附带的新功能,据称这可以将性能提高大约400%。

令人印象深刻,所以我在我的ABP项目上试了一下

Template asp.net core mvc 4.0.2.0

我在web.mv.cproj文件中添加了以下内容

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
  </ItemGroup>

不幸的是,我不认为这个版本的ABP框架是兼容的,因为项目根本无法运行和抛出:(最终)

HTTP错误500.30 - ANCM进程内启动失败

我在web.config中设置stdoutLogEnabled="true"并重新尝试后检查了日志 - 但没有条目。

有没有人在流程设置中对asp.net核心运行当前的ABP有什么成功?

我想这可能是ABP vNext中唯一可用的东西。

aspnetboilerplate
7个回答
40
投票

尝试更改csproj中的部分

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
  </PropertyGroup>

以下......

 <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
    <AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
 </PropertyGroup>

https://github.com/dotnet/core/blob/master/release-notes/2.2/2.2-known-issues.md


3
投票

删除.vs文件夹,然后使用进程内托管模型重试。


2
投票

ASP.NET Core 2.2或更高版本:对于使用进程内托管模型的64位(x64)自包含部署,请禁用32位(x86)进程的应用程序池。

在IIS管理器>应用程序池的“操作”侧栏中,选择“设置应用程序池默认值”或“高级设置”。找到启用32位应用程序并将值设置为False。

Source: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.0#create-the-iis-site


1
投票

删除.cproj文件中的AspNetCoreHostingModel行对我有用。我的另一个项目没有这样的线路工作正常。

<PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>

1
投票

在我的情况下,我最近在appstettings.json文件中更改了数据库连接字符串。没有记录或错误捕获我怀疑这个错误结束导致“HTTP错误500.30 - ANCM进程中启动失败”错误。

我碰巧注意到x-freestyler和Tahir Khalid之间的交流,Tahir在启动时提出了IOC问题。由于我的创业公司最近没有改变,但我的appstettings.json已经 - 我确定我的appstettings.json中的连接字符串是导致问题的原因。我纠正了错误的连接字符串,问题解决了。感谢整个社区。


0
投票

此发布配置文件设置为我修复:

配置发布配置文件 - >设置 - >站点扩展选项 - >

  • [x]安装ASP.NET核心站点扩展。

0
投票

我的是因为program.cs中的UseKestrel()应该是2.2中的.ConfigureKestrel()

更多信息在https://docs.microsoft.com/en-us/aspnet/core/migration/21-to-22?view=aspnetcore-2.2&tabs=visual-studio&WT.mc_id=-blog-scottha#update-kestrel-configuration


0
投票

花了一整天的时间与我自己决定在IIS上使用InProcess托管来托管我的asp.net核心应用程序后,我终于为解决这个问题感到自豪和松了一口气。几个小时的反复通过相同的论坛,博客和SO问题尽力解决问题,我仍然坚持遵循所有上述方法。现在,我将描述我解决它的经验。

第1步:在IIS中创建一个网站

步骤2:确保网站的AppPool在AppPool中将.Net CLR版本设置为“无管理代码”和“启用32位应用程序”属性 - >高级设置设置为false

第3步:确保您的项目引用.Net core 2.2

步骤4:在ConfigureServices方法内的startup.cs文件中添加以下行

services.Configure<IISServerOptions>(options =>
{
     options.AutomaticAuthentication = false;
});

第6步:添加以下Nuget包

Microsoft.AspNetCore.App v2.2.5或更高版本

Microsoft.AspNetCore.Server.IIS v2.2.2或更高版本

第7步:在.csproj文件中添加以下行

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

第8步:构建并发布您的代码(最好是x64位)

步骤9:确保在etc / hosts文件中添加了您的网站主机名

步骤10:重新启动World Wide Web Publishing服务

现在测试你的asp.net核心应用程序,它应该使用InProcess托管托管为了验证你的应用程序是否使用InProcess模式托管,检查响应头,它应该包含以下行

服务器:Microsoft-IIS / 10.0(IIS版本可以是任何,具体取决于您的系统)


0
投票

我发现另一个问题开始提供与问题中相同的错误消息。我在这里分享这个,这样在更改项目文件之前,您可以确保您的服务已正确注册。

我也运行.netcore 2.2并且收到相同的错误消息,所以我将项目文件从InProcess更改为OutOfProcess,如所选答案中所示。之后,当我收到“无法实例化实现类型”时,我找到了问题的真正原因:这个原因对我来说是:

services.AddScoped<IMyService, IMyService>();

代替

services.AddScoped<IMyService, MyService>();

相关文章:Why am I getting the error "Cannot instantiate implementation type" for my generic service?

© www.soinside.com 2019 - 2024. All rights reserved.