我正在试验.net core sdk 2.2附带的一项新功能,据说该功能可以将性能提高约400%。
令人印象深刻,所以我在我的ABP(ASP.NET Boilerplate)项目中进行了尝试
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中可用。
尝试更改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
对我来说,它被错误地注入了HostedService中的DBContext。我据此重写:
因为应用程序崩溃。为谁节省了这个例外的时间!
使用.Net Core 2.2,您应该能够使用InProcess托管模型,因为它自然会更快:一切都在IIS中处理,而IIS和您应用程序的Kestrel服务器之间无需进行额外的HTTP跳跃。您可能想做的一件事是添加以下标记:AspNetCoreModuleV2注意新的AspNetCoreModuleV2与旧的AspNetCoreModule选项。要做的另一件重要事情是,检查Windows应用程序事件日志,以找出罪魁祸首。尽管错误消息可能含糊不清,但有时它们指向导致失败的代码中的确切行号。另外,如果您将CI / CD与TFS一起使用,则appsettings.json文件中可能存在未正确替换为其指定值的环境变量,这是我的例外来源之一。
经过一整天的努力,我决定通过InProcess托管在IIS上托管我的asp.net核心应用程序,我终于为此感到自豪和欣慰。数小时反复尝试通过相同的论坛,博客和SO问题尽力解决问题的方法,但在遵循上述所有方法之后,我仍然陷入困境。现在在这里我将描述我解决问题的经验。
如果您使用的是Visual Studio,并且正在运行它的任何实例,请将其全部关闭。
您应该找到一个.vs
子文件夹,其中驻留Visual Studio解决方案(.sln
文件)。删除.vs
文件夹,然后尝试使用进程内托管模型。
就我而言,我最近在我的appstettings.json文件中更改了数据库连接字符串。没有适当的日志记录或错误捕获,我怀疑该错误会导致“ HTTP错误500.30-ANCM进程内启动失败”错误。
我碰巧注意到x-freestyler与Tahir Khalid之间的交换,其中Tahir提出了启动时的IOC问题。由于我的启动公司最近没有发生变化,但是我的appstettings.json发生了变化-我确定我的appstettings.json中的连接字符串是造成此问题的原因。我更正了错误的连接字符串,问题得以解决。感谢整个社区。
删除.cproj文件中的AspNetCoreHostingModel行对我有用。在我的另一个项目中没有这样的线路可以正常工作。
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
我的原因是因为program.cs中的UseKestrel()在2.2]中应为.ConfigureKestrel()
ASP.NET Core 2.2或更高版本:对于使用进程内托管模型的64位(x64)独立式部署,请为32位(x86)进程禁用应用程序池。
我发现了另一个问题,该问题开始时给出与问题中相同的错误消息。我在这里共享此信息,以便在更改项目文件之前可以确保您的服务已正确注册。
在某些情况下,可能只是拼写错误,会破坏并阻止解析JSON设置文件
此发布配置文件设置已为我修复: