發表文章

目前顯示的是 6月, 2020的文章

[.Net Core][Windows Service][03]使用Console Application (主控台應用程式) 搭配Topshelf

圖片
除Worker以外還有另一種Windows Service 的開發方式 透過Console Application(主控台應用程式)搭配Topshelf套件即可建置Windows Service 使用傳統開發 Windows Service 方式時,必定會面臨到如何在開發時期進行偵錯的問題 當然利用一些小技巧是可以達成 (ex. 參考 如何對 Windows Service 進行除錯 文章) 但到底還是要手動切換。 透過 Topshelf 這個套件可以讓開發者直接使用 Console 方式進行開發 編譯出來就是一隻 console 程式且可以獨自運行 又可以透過命令列指令將這個 console 執行檔安裝成為 Windows Service 服務 達到易於開發、偵錯及靈活使用的優點。 (若要佈署在Linux環境另有Topshelf.linux套件可使用) 1.建立Console Application(主控台應用程式) 專案 2.透過NuGet安裝Topshelf 套件 3.建立一個新類別 MainService,內容只有簡單印出目前系統時間(每秒執行一次) 4.於Program.cs中使用HostFactory掛載 MainService執行主要工作 5.可直接偵錯/運行,執行畫面如下 6.發佈後進行Windows Service安裝 於命令提示字元輸入 「執行檔名稱 install」,後面還可帶一些參數 例: ConsoleApp1.exe help  (可查詢相關參數使用方式) ConsoleApp1.exe install (安裝Windows Service) ConsoleApp1.exe uninstall (移除 Windows Service)

[.Net Core][Windows Service][02]Worker Service搭配Coravel 設定排程

圖片
Worker Service基本的範例功能太過陽春,可搭配Coravel 套件強化工作排程的設定 Coravel提供非常豐富的排程時間設定,以下介紹基本的使用方式 1.安裝 Coravel 套件 2.Program.cs加入引用 Coravel 3.加入排程項目Worker2、Worker4 4.設定排程執行時間 基本排程時間設定說明: Method Description EverySecond() 每秒執行 EveryFiveSeconds() 每5秒執行 EveryTenSeconds() 每10秒執行 EveryFifteenSeconds() 每1 5 秒執行 EveryThirtySeconds() 每30秒執行 EverySeconds(3) 每 n 秒執行 EveryMinute() 每1分鐘執行 EveryFiveMinutes() 每5分鐘執行 EveryTenMinutes() 每10分鐘執行 EveryFifteenMinutes() 每15分鐘執行 EveryThirtyMinutes() 每3 0 分鐘執行 Hourly() 每小時執行 HourlyAt(12) 每小時12分執行 Daily() 每1天執行 DailyAtHour(13) 每一天下午1:00執行 DailyAt(13, 30) 每一天下午1:30執行 Weekly() 每週執行 多條件式時間設定: 1.每週一、三、五半夜1點執行 scheduler.Schedule<TodoJob>()     .DailyAtHour(1)     .Monday()     .Wednesday()     .Friday(); 2.週未每5分鐘執行 scheduler.Schedule<ReportJob>() ...

[.Net Core][Windows Service][01]Worker Service (背景工作服務) 基本建立與安裝

圖片
一般來說 Worker Service 會被用來執行需要長時間處理或定期需要做的事情 .NET Core 3.0 提供了 Worker Service,用來建立系統服務的基本專案。 目前資源太少,網路上大都只提供最簡單的範例,還沒有找到可以靈活操作各個排程的方法。 在.Net Core的環境下不論是Worker Service或Console Application都是基本的應用程式,一樣都是透過套件就能轉換為Windows服務。 以下先介紹Worker Service基本的範例及Windows Service建置 [建立Worker Service專案] 建立好的專案一開始就附有基本的範例 (每秒執行並印出時間) [轉換為 Windows Service] 1..加入 Microsoft.Extensions.Hosting.WindowsServices 套件 2.於Program.cs 的CreateHostBuilder加入 UseWindowsService 2.完成的Worker Service需手動安裝至Windows 服務 於命令提示字元輸入指令 安裝:sc create WindowsServiceName binPath=執行檔位置 啟動:sc start WindowsServiceName 停止:sc stop WindowsServiceName 移除:sc delete WindowsServiceName [轉換為 Linux Daemon Service] 1. 於專案新增 Microsoft.Extensions.Hosting.Systemd 套件 2.在 Program 類別 CreateHostBuilder 處加上 UseSystemd()