簡體   English   中英

作為 Windows 服務運行時,.net core 3 中的輔助服務中未調用 StopAsync

[英]StopAsync not called in worker service in .net core 3 when running as Windows service

想知道你們以前是否遇到過這種情況。 我想讓 grpc server+web api 作為 windows 服務運行,因為它意味着一個長時間運行的進程。 Web API 基本上只是用於內部狀態的運行時監控。所以我創建了一個新的 grpc 服務(.net core 3),並添加了工作類,並添加了控制器等。並使用了 Microsoft.Extensions.Hosting .WindowsServices nuget 包以啟用 Windows 服務。 我使用“sc create binpath= start= auto”安裝它,然后使用“sc start”啟動它。觀察日志文件,我可以看到它已經啟動,訪問 swagger 頁面,我可以看到它運行良好。

當在工作類中調用 StartAsync 和 StopAsync 時,我正在將某些內容記錄到日志文件中,我可以看到當服務啟動時,StartAsync 被調用,這是應該的。

現在有趣的是,當系統重新啟動時,我沒有看到 StopAsync 被調用。

在 DOS 中,如果我使用 dotnet.exe 運行它,StartAsync 被調用,按 CTRL+C 停止它,StopAsync 被調用..但是為什么當它作為 Windows 服務運行並且系統重新啟動時不調用 StopAsync? 這是 windwos 服務 nuget 包本身的錯誤嗎? 還是我在這里遺漏了什么?

有趣的是,在 Startup 類中,我什至使用 IHostApplicationLifetime 來攔截 ApplicationStarting、ApplicationStopping,但同樣,調用了啟動,但沒有調用停止.. 為什么?

有人可以啟發我嗎?

.net core 團隊的好心人已經知道這個問題並將在 .net core 5.0 中解決它。 參考這里: https ://github.com/aspnet/Extensions/pull/2705

預計 2020 年底。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM