ASP.NET 网络 API 启动问题

ASP.NET Web API Startup Questions

我正在使用 .NET 4.5.2 创建 ASP.NET Web API。 API 需要在启动时连接到 运行 空间。不过,我对这个 Startup.Configuration 方法实际上何时 运行 有疑问。当我启动网站或应用程序池时,它似乎没有 运行。似乎等到有人第一次尝试访问该网站时。这个对吗?此外,它似乎在随机时间再次 运行。 2小时、4小时、16小时后我都看到了运行。这真的没有任何意义。当这些方法应该 运行 时,有人可以为我澄清一下吗?另外,如果你有一个更好的地方来放置它们的建议,因为我希望它成为所有连接的共享 运行 空间,并且我希望它在任何人尝试连接到之前 运行 API。也许是一项单独的服务?

此外,ASP.NET CORE 是否值得研究?除了 IIS,我不需要它 运行,但是如果使用 CORE 有好处,我就可以很容易地切换。

public partial class Startup
{
    public Cache GlobalCache;
    public static PowershellRunspace PSRunspace;
    public static ActiveDirectory ADObjects = new ActiveDirectory();
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
        GlobalCache = new Cache();
        AppLog log = new AppLog();

        log.InfoLog("Starting PowerShell Runspace in Hangfire...", true);

        GlobalConfiguration.Configuration.UseSqlServerStorage("Hangfire");
        BackgroundJob.Enqueue(() => log.InfoLog("Hangfire started!", true));
        BackgroundJob.Enqueue(() => ADObjects.Startup(true));
        BackgroundJob.Enqueue(() => StaticRunspace.Start());

        app.UseHangfireDashboard();
        app.UseHangfireServer();

    }
}

假设您是 运行 IIS 中的此应用程序(而不是 self-hosting),以下规则适用:

  1. Configuration 方法在每次应用程序启动时运行一次。
  2. 应用程序延迟启动(在通过 HTTP/S 向它发出第一个请求时)。
  3. IIS 有一些影响应用程序的设置:
    1. 空闲超时。如果在 20 分钟内未通过请求访问该应用程序,则该应用程序将被卸载/置于离线状态。下一个请求再次启动它。
    2. 常规应用程序池回收。它只是通过每 1740 分钟回收应用程序池来直接重新启动应用程序。

因此,您看到的行为可能是由于应用程序访问不频繁以及 IIS 默认设置所致。如果您想查看或配置设置,您可以进入 IIS,右键单击您的应用程序池,然后选择高级设置。