2017-01-23 83 views
0

我正在使用.NET 4.5.2創建ASP.NET Web API。 API需要在啓動時連接到運行空間。我對這個Startup.Configuration方法實際運行的時間有疑問。當我啓動網站或應用程序池時似乎沒有運行。它似乎等到有人第一次嘗試訪問該網站。它是否正確?此外,它似乎隨機再次運行。我已經看到它在2小時,4小時和16小時後運行。它沒有任何意義。這些方法應該運行時,有人可以爲我清理嗎?另外,如果你有一個更好的地方放置它們的建議,因爲我希望它成爲所有連接的共享運行空間,並且我希望它在任何人試圖連接到API之前運行。也許一個單獨的服務?ASP.NET Web 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

假設你正在運行在IIS(而不是自我託管)這個應用中,應用以下規則:

  1. Configuration方法每個應用程序開始運行一次。
  2. 應用程序懶惰地啓動(通過HTTP/S的第一個請求)。
  3. IIS有一些影響應用程序的設置:
    1. 空閒超時。如果應用程序在20分鐘內未通過請求訪問,則應用程序將被卸載/脫機。下一個請求再次啓動。
    2. 定期應用程序池回收。它只是直接重新啓動應用程序,每1740分鐘回收應用程序池。

所以你看到的行爲可能是由於應用程序的訪問不頻繁,與IIS默認設置相結合。如果您想查看或配置設置,可以進入IIS,右鍵單擊您的應用程序池,然後選擇高級設置。

+0

謝謝,這解釋了我所看到的一切。 –