我的Windows服務是一個具有大量緩存的數據服務器。在服務OnStop期間,我保存緩存以避免數據丟失。保存緩存可能需要幾分鐘,從而防止Windows服務管理器從超時我使用SetServiceStatus Win32的回調:在系統關閉期間.NET窗口服務中止
this.serviceStatus.currentState = (int)State.SERVICE_STOP_PENDING;
this.serviceStatus.checkPoint = 1;
this.serviceStatus.waitHint = 60000;
SetServiceStatus(Process.GetCurrentProcess().Handle, ref this.serviceStatus);
這工作正常。
我也將CanShutdown設置爲true,並添加了OnShutdown,以便服務將成爲系統關機證明。在這裏,我有效地做了OnStop中的同樣的事情:
protected override void OnShutdown()
{
this.OnStop();
base.OnShutdown();
}
這並不太好。當系統關閉時,當緩存被保存時,我得到「設備未準備就緒」。這表明Windows在停止/關閉之前會中止服務。用SetServiceStatus防止這種情況顯然不起作用。
如何獲得更多時間(延遲重啓)以完成保存?
任何建議表示歡迎。
快速的問題 - waitHint爲60秒 - 1分鐘。這是你真正需要的嗎? (你說需要幾分鐘)。 – 2010-02-15 13:12:25
我只需要成爲那個在這裏舉手的人,並提出了爲什麼你要實現一個長期存在的緩存行爲的問題。我並不是說你的整個設計是無效的,我只是說我聞到了一些東西。或者它可能是來自法國的非常好的奶酪,或者它可能是非常糟糕的。 – 2010-02-15 13:18:31
我可以看到你的手舉起,戴夫。我知道你的想法 - 服務沒有把這些數據保存在內存中。但這是緩存的想法。無論如何緩存在幾種情況下都會被保存,但在系統關閉之前它可以被加載數據。而服務器應該很少重新啓動。但我需要做好最壞的準備。 – 2010-02-15 13:41:21