我猜所有執行立即停止,並且調用結束超時。當你停止一項服務時究竟發生了什麼,你對此有多少控制?如果我在處理WCF請求時停止Windows服務,會發生什麼情況?
5
A
回答
4
當服務控制管理器告訴您的服務停止時,.Net服務基礎將狀態設置爲SERVICE_STOP_PENDING並調用服務的OnStop方法。你對這個通知做什麼取決於你。理想情況下,您將擁有一些機制,例如使用CancellationToken通知您當前正在工作的任何線程,以便他們需要將其包裝並儘快退出。在你的情況下,它可能涉及關閉你的ServiceHost。您的OnStop方法應該等到知道它已完成(例如通過加入線程)後再返回。有多種方式可以通知服務控制管理中心您需要更多時間,或者讓其知道您已收到通知,並且正在積極致力於停止(SERVICE_STATUS dwcheckpoint)。
如果您只是立即從您的OnStop返回(或不打擾實施它),那麼我認爲您的服務的線程將全部被強行終止。我不知道,因爲我從來沒有嘗試過。我始終實現OnStop,並且只有在清理完所有內容後才能返回。如果您實現OnStop,但需要很長時間才能返回而不讓服務控制管理器知道您正在處理它,那麼它會稍等一會(服務停止20秒...這是一個註冊表設置),然後終止你的線程。
正確的做法是編寫您的服務,以便快速啓動,快速停止,暫停並繼續快速等等。正如您從上述說明中看到的,完全取決於您的情況服務已經實施。只有你有這些信息才能「確定地知道」。
相關問題
- 1. 如果服務停止,後臺線程會發生什麼情況?
- 2. 如果Windows服務在停止時未退出線程會發生什麼情況?
- 3. 如果未處理事件會發生什麼情況?
- 4. Windows服務中的例外情況 - 服務在發生異常時停止
- 5. 如果Web服務更改參數會發生什麼情況?
- 6. 如果我向未安裝Apache的服務器發出HTTP請求,會發生什麼情況?
- 7. 如果在Application_Start中引發未處理的異常,會發生什麼情況?
- 8. 如果正在處理的活套正在退出,會發生什麼情況?
- 9. 如果我的IExceptionPublisher引發異常,會發生什麼情況?
- 10. 如果DTD鏈接無處可逃,會發生什麼情況?
- 11. 如果每個請求都有改進實例,會發生什麼情況?
- 12. 如果多個請求涉及單個servlet,會發生什麼情況..?
- 13. 將請求分派給JSP後臺會發生什麼情況
- 14. 在Windows服務的停止/暫停請求期間處理延遲
- 15. 請求來到Tomcat服務器時會發生什麼?
- 16. 爲什麼在某些情況下請求不會發送到服務器?
- 17. WCF服務停止發送Web請求,一旦它在IIS
- 18. 如果有人拿到我的appsecret,會發生什麼情況?
- 19. 如果我不調用transaction.close或transaction.rollback,會發生什麼情況?
- 20. 如果我不指定targetFramework =「4.0」,會發生什麼情況?
- 21. TFS - 如果我刪除工作區會發生什麼情況?
- 22. 如果我使用printf(「one \ 0two」),會發生什麼情況;?
- 23. 與自我的併發請求處理託管WCF Web服務
- 24. WCF的Windows服務停止
- 25. 當我停止rails服務器時,我的elasticsearch索引會發生什麼?
- 26. 如果超時,會發生什麼情況?
- 27. 當您在堆棧中請求更多空間時會發生什麼情況?
- 28. 如果發佈者在收到ack之前終止,會發生什麼情況?
- 29. 大型資源創建請求超時時會發生什麼情況?
- 30. 當發出請求並且客戶端立即退出時,服務器會發生什麼情況?
什麼是Windows服務?這是你寫的東西嗎?這完全取決於服務如何處理關閉請求。它可以被寫爲完成它的當前工作或不完成。 – James 2012-07-26 17:52:33
你自己測試過了嗎?結果是什麼? – Bernard 2012-07-26 17:53:15
我會寫出正確的答案......但老兄......自己測試!只需幾秒鐘即可自行測試。 – Eiver 2012-07-26 18:35:07