發表文章

[.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()

[Dapper][01]基本應用

Dapper套件可直接由NuGet取得 安裝後於程式碼中加入 using Dapper; 即可使用。 1.執行SQL指令 (Execute) //SQL指令 StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine(" UPDATE VipInfo SET IsStop=0 WHERE VipNo = @VipNo "); //變數宣告 var dynamicParams = new DynamicParameters(); dynamicParams.Add("VipNo", Source.VipNo); //執行SQL var Results = conn.Execute(sbSql.ToString(), dynamicParams); 2.資料查詢 (單一資料表) //SQL指令 StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine(" SELECT VipNo, ShopNo, VipNa FROM VipInfo WHERE VipNo = @VipNo "); //變數宣告 var dynamicParams = new DynamicParameters(); //添加變數 dynamicParams.Add("VipNo", Source.VipNo); //執行SQL var Results = conn.Query< dynamic >(sbSql.ToString(), dynamicParams); 3.資料查詢 (多資料表) //SQL指令 StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine(" SELECT VipNo, ShopNo, VipNa FROM VipInfo WHERE VipNo = @VipNo "); sbSql.AppendLine(" SELECT VipNo, VpTyNo FROM VipInfoType WHERE VipNo = @VipNo "); //變數宣告 var dyna...

[.NET Core] [Swagger] [04] DocumentFilter

圖片
專案的API可能包含所有客戶的API接口 如果我們不想在API文件中提供所有API接口內容 可以 增加過濾器移除不想被看到的API接口 被隱藏的API接口在Swagger文件中看不到,但還是可以被使用的。 在Startup.cs 啟動中修改,增加文件過濾器 以下新增名稱為 AllowAPIDocumentFilter 來過濾未在允用清單中的API接口 自己建一個APISetting.json 允用清單(字串陣列)

[.NET Core] [Swagger] [03] 基本使用方式

圖片
1.專案中有些不想公開的口,可設定隱藏 (IgnoreApi = true) 2.輸出的Response可指定特定資料格式 3.利用註解標籤定義API的名稱、傳入參數、各參數的說明。

[.NET Core] [Swagger] [02] 安裝與設定

圖片
透過簡單的Swagger套件安裝即可產生Swagger頁面 1.將現有專案加入Swagger套件 2.在啟動檔Startup.cs加入Swagger設定,設定中指定XML檔名 3.為了讓Swagger取得相關註解標籤,專案需設定產出XML檔