ASP.NET Web API启动问题

时间:2017-01-23 05:13:15

标签: asp.net asp.net-web-api startup

我正在使用.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();

    }
}

1 个答案:

答案 0 :(得分:1)

假设您在IIS中运行此应用程序(而非自托管),则适用以下规则:

  1. 每个应用程序启动时Configuration方法运行一次。
  2. 应用程序是懒惰启动的(在第一次通过HTTP / S请求时)。
  3. IIS有一些影响应用程序的设置:
    1. 空闲超时。如果在20分钟内未通过请求访问应用程序,则应用程序将被卸载/脱机。下一个请求再次启动它。
    2. 常规应用程序池回收。它只是通过每1740分钟回收应用程序池直接重新启动应用程序。
  4. 因此,您所看到的行为可能是由于应用程序的不频繁访问以及IIS默认值。如果您想查看或配置设置,可以进入IIS,右键单击应用程序池,然后选择“高级设置”。