2012-10-17 49 views
0

我有一個windows服務,它將在被調用時啓動(遠程)。我不想讓服務繼續運行,所以我希望服務在空閒時間進入時自行停止,意味着最後一次呼叫後幾分鐘。 我不想停止從我的遠程客戶端的服務,因爲我不知道我是否完成了工作,這就是爲什麼我想在服務端使用一些空閒事件。 有一些方法嗎? 謝謝,在Windows服務中檢測空閒

回答

1

在每次調用時重置的Windows服務中添加一個定時器。當計時器過去(稍後幾分鐘)時,它會調用服務的停止方法,從而在服務器變爲空閒狀態時有效地停止它。

附加信息 爲了減少你的編碼開銷,你正在尋找一個截取點來處理這個定時器。如果您使用WCF進行服務調用,最簡單的方法是將自定義IParameterInspector作爲服務擴展添加。您可以將定時器邏輯添加到AfterCall()方法中,以便每次服務調用都可以通過同一代碼塊&來重置定時器。有關實現自定義行爲的詳細信息,請參閱this MSDN article

如果你不使用WCF,這有點棘手。您可以使用Castle Windsor或PostSharp之類的AOP框架,或以消息傳遞方式設計服務。 AOP允許您使用將調用您的重置代碼的屬性來修飾您的方法。消息傳遞包括指定服務的合同,以便在服務中有一個通用入口點,檢查輸入消息&根據其內容將其路由到正確的方法。正如你可以想象的,一個入口點=一個地方添加定時器重置代碼。但是這些都不像WCF解決方案IMO那樣簡單易行。

+0

是的,我在想,但我也在C#中尋找其他已經定義的機制。如果有... ...? – user810917

+0

另一個問題可能是:有什麼方法可以在執行任何方法之前(或之後)在一個普通的地方攔截所有的服務調用,以便在那裏放置這個定時器並且不編輯所有的方法來調用一個方法來執行它? – user810917

+0

已刪除...抱歉。 – arootbeer