-
建立API串接第三方平台
- 製作 Model
- 撰寫 Service
- 注冊 Service
- 呼叫 Service
-
以EF Core整合SQLite儲存口罩剩餘數量資訊
- 安裝 SQLITE
# PowerShell Install-Package Microsoft.EntityFrameworkCore.Sqlite -Version 5.0.1 # .NET Core dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 5.0.1
- 進行 MIGRATION
如果未安裝EF Core 命令列工具 (dotnet ef),須額外安裝# PowerShell Install-Package Microsoft.EntityFrameworkCore.Tools -Version 5.0.1 Install-Package Microsoft.EntityFrameworkCore.Design -Version 5.0.1 Add-Migration Initial Update-Database # .NET Core dotnet tool install --global dotnet-ef dotnet add package Microsoft.EntityFrameworkCore.Design dotnet ef migrations add Initial dotnet ef database update
- 驗證安裝
輸出後會看到獨角獸!
# PowerShell Get-Help about_EntityFrameworkCore # .NET Core dotnet ef
_/\__ ---==/ \\ ___ ___ |. \|\ | __|| __| | ) \\\ | _| | _| \_/ | //|\\ |___||_| / \\\/\\
- 驗證安裝
- 安裝 SQLITE
- 安裝 HANGFIRE + SQLITE 套件
# PowerShell Install-Package HangFire.Core -Version 1.7.18 Install-Package Hangfire.AspNetCore -Version 1.7.18 Install-Package Hangfire.Storage.SQLite -Version 0.2.4 Install-Package sqlite-net-pcl -Version 1.7.335
- 加入 HANGFIRE 組態
先測試HangFire是否正常執行。
public void ConfigureServices(IServiceCollection services) { services.AddHangfire(configuration => configuration .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseSQLiteStorage()); services.AddHangfireServer(); }
另外,recurringJob 支援Cron 設定。因為 Hangfire 走的是 MVC 路由,而我們開的是 Web API 專案,預設情況下吃不到 MVC 路由。public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseHangfireDashboard(); BackgroundJob.Enqueue(() => Console.WriteLine("Hello HangFire.")); RecurringJob.AddOrUpdate("Hello", () => Console.WriteLine("Hello, recurringJob."), Cron.Minutely()); }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); }
- MaskService 有使用到 HttpClient ,改為使用 IHttpClientFactory 注入
private HttpClient _client; public MaskService(IHttpClientFactory client) { _client = client.CreateClient(); _client.BaseAddress = new Uri("https://www..../"); }
- 將原本 MaskController 裡面下載/更新資料庫的行為改由 MaskSchedule 處理,再由 HangFire 執行
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { BackgroundJob.Enqueue<MaskSchedule>(x => x.InitialDb()); RecurringJob.AddOrUpdate<MaskSchedule>("MaskDataUpdate", x => x.MaskDataUpdate(), Cron.Minutely()); }
- 簡單五步驟:以EF Core整合SQLite儲存口罩剩餘數量資訊
- 簡單五步驟:ASP.NET CORE整合HANGFIRE來排程更新口罩剩餘數量資料
- 政府資料開放平台:健保特約機構口罩剩餘數量明細清單
- HangFire
- Crontab guru - 快速測試出所需的 Cron 設定
- 在 ASP.NET Core 中使用 IHttpClientFactory 發出 HTTP 要求
- AsyncEnumerableReader' reached the configured maximum size of the buffer when enumerating a value
- 假設回傳資料量過大會跳出上述錯誤
- 別傳太多資料
- 修改回傳上限(預設8192)
services.AddControllers(options => options.MaxIAsyncEnumerableBufferLimit = N)
- 不要使用IAsyncEnumerable
用ToList()之類的回傳