ASP.NET Core 2.2 网站预热

问题描述 投票:0回答:1

我已将 .NET Framework 4.6 WebApi 迁移到 .NETCore 2.2,但无法让 IIS ApplicationInitialization 模块在启动/插槽交换/横向扩展时调用我的端点。

我添加了一个 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="dotnet" arguments=".\FR911.Api.Core.dll" stdoutLogEnabled="false" stdoutLogFile="\\?\%home%\LogFiles\stdout" hostingModel="inprocess" />

      <applicationInitialization doAppInitAfterRestart="true">
        <add initializationPage="api/Warmup>
        <add initializationPage="/" />
      </applicationInitialization>
    </system.webServer>
  </location>
</configuration>

但是,如果我保留“进程中”的默认托管模型,我的预热就永远不会被调用。 如果我更改为“进程外”托管,则在交换完成之前确实会调用我的预热。

我认为以下问题可能相关:

https://github.com/aspnet/AspNetCore/issues/8057

我不想只是手动 ping 或以其他方式命中我的端点,因为我希望模块中的现有功能(IIS 是 Azure)在预热请求完成之前不会实际交换端点(从而初始化 EFCore 等)

有人有幸让它与进程内托管模型一起使用吗?

azure asp.net-core azure-web-app-service asp.net-core-webapi
1个回答
0
投票

出现此问题的原因是 IIS 中 ASP.NET Core 应用程序的进程内托管模型当前不支持预期的 IIS 应用程序初始化模块。您链接的问题中引用了此限制https://github.com/dotnet/aspnetcore/issues/8057 在此托管模型中,IIS 工作进程 (w3wp.exe) 直接托管应用程序,并且请求在启动或插槽交换期间可能无法按需要到达初始化端点。有关更多信息和查看共享链接https://techcommunity.microsoft.com/blog/iis-support-blog/application-initialization-in-iis/4232177 https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/in-process-hosting?view=aspnetcore-9.0

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