發表文章

目前顯示的是 2022的文章

.Net Core 使用反向代理-YARP

圖片
前言 在參考Clearn Architecture時,看到的一個有趣的東東 YARP 反向代理套件,用來實作Api Gateway架構(如下圖),將多個微服務集合起來,對外統一端點、負載平載、壓縮、緩存等。 圖片來源:微軟電子書 什麼是YARP   微軟開源的專案,運用 .NET (.NET Core) 建置高效能反向代理,Y特點是容易自訂,用戶可以根據需求,自訂並且調整成來滿足特殊場景的需求。 提供了兩個主要使用和自訂的方向,第一個是作為一個全功能代理;另一種使用方式,則是將 YARP 用於高度自定義的環境,用戶可以直接呼叫 YARP 請求轉送程式,繞過路由和負載平衡等模組。開發者甚至可以在同一個程序中混合兩種方式,根據路由切換。( 參考來源twMVC ) POC實作 本文將新增一個ApiGatewary專案及2個WebAPI專案,由ApiGatewary統一對外存取WebAPI。 1.新增ApiGatewary 專案 加入套件 Install-Package Yarp.ReverseProxy -Version 1.1.1 Program.cs  啟用YARP builder.Services.AddReverseProxy()     .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy")); .. app.MapReverseProxy(); 2.新增 WebAPI專案-Product 回傳產品資訊 https://localhost:7298/api/products/Product     [Route("api/products/[controller]")]     public class ProductController : ControllerBase     {         [HttpGet]         public IEnumerable<Product> Get()         {             List<Product> products = GeTestData();             return products;         } .. ...略 3.

Application Insights 整合NLog

圖片
前言    這兩天將寫好的LineBot程式部署到Azure上測試,過程中發生錯誤及功能無法成功執行時候,要檢查是什麼原因? 頓覺寸步難行,沒有記錄可以查詢......也不知該如何查XD。花了些功夫,將這塊補上。 Application Insight - 啟用 App Service --> Application Insights 啟用。 啟用後,此時程式不用任何修改,只要有Request就可以在Azure上的Application Insights Transaction search查詢基本的資訊。 Application Insight - 程式修改 nuget參考  : Microsoft.ApplicationInsights.AspNetCore Program.cs  builder.Services.AddApplicationInsightsTelemetry(); appsettings.json 加入連線字串 (在Applicaiton Insights 頁面取得)     "ApplicationInsights": {         "ConnectionString": "Your Connection String"     } 此時你在本機測試(任何Request),可以在Azure上的Application Insights Transaction search查詢 或在Visual Studio查詢 Application Insight-搭配NLog 加入nuget參考 NLog.Web.AspNetCore Microsoft.ApplicationInsights.NLogTarget 新增NLog.config 設定如下, <instrumentationKey> 須換成你的 ,instrumentationKey在跟你取得ConnectionStrings同一位置。 設定內容:寫入檔案及Application Insights,並忽略開發時期的一堆底層資訊。 <?xml version="1.0" encoding="utf-8"?> <nlog xmlns="ht

.Net Core 使用NLog

圖片
  之前.Net Framework時使用的NLog,到了.Net Core後,使用方式有點不同,整理如下。 加入套件 NLog NLog.Web.AspNetCore 新增NLog.config檔案 設定檔已針對Microsoft及Hosting等略過及Conosle處理 <?xml version="1.0" encoding="utf-8"?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="false"       xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">   <extensions>     <add assembly="Microsoft.ApplicationInsights.NLogTarget" />     <add assembly="NLog.Web.AspNetCore"/>   </extensions>   <variable name="layoutDefine"       value="${longdate} [${event-properties:item=EventId_Id:whenEmpty=0}][${level:padding=-5}] ${message} ${exception:format=tostring} (${callsite:includeNamespace=false:fileName=true:includeSourcePath=false})" />   <targets>     <!---預設所有資訊先寫到Trace-->     <target xsi:type="Tra

VS2022 Blazor Maui staticwebassets.build.json not found

圖片
問題 之前開發的 Blazor Maui App在VS2022更新後無法建置。 錯誤訊息: staticwebassets.build.json' not found 原因 更新Vs2022 to 17.3.4 or Window Update 。Github有一堆受災戶 已回報Issue 。 解決方法-暫時性的 舊專案清除obj/bin 並執行.net restore,此為修正maui相關的nuget無法正確參考。 安裝 6.0.4 SDK . 在專案的上層目錄(跟.sln同層), 新增global.json 命令如下 dotnet new globaljson --sdk-version 6.0.400 其它/參考 https://github.com/dotnet/maui/issues/10102 https://blog.miniasp.com/post/2021/06/04/Choose-the-right-DotNet-SDK-version-using-global-json

.NET Interactive Notebook 互動式文件測試

圖片
前言 同事參加K.NET2022年中技術分享,聽到的一個有趣的東西,讓你可以用 Markdown 寫說明文件,也可以搭配各種程式語言,直接在 Visual Studio Code 中 執行文件內的程式碼。 本機開發環境 Visual Studio Code 安裝.NET Interactive Notebooks 擴充套件 VSCode 安裝套件後,可以按 ctrl + shift + P ,會列出下圖清單,此時選擇 .NET Interactive: Create new blank notebook 建立空白的 Notebook 檔案 檔案類型選擇ipydb,此類型支援線上環境MyBinder 輸入C#程式碼,可以直接執行 MyBinder線上環境 寫好的文件,要給別人測試執行,最快的方式可以透過MyBinder直接對接Github的Repository。 Github新增Repository KimInteractiveNotebook 新增 Dockerfile (內容在連結裡) 新增 Nuget.config   (內容在連結裡) 目錄結構 要注意的是在Dockerfile有作目錄Mapping,文件要放在notebooks下 簽入Github,並將URL貼到 MyBinder 執行Launch,MyBinder會將你的Github建置成image。 最下方的URL 就是你要分享給別人執行的網址  https://mybinder.org/v2/gh/kimx/KimInteractiveNotebook/HEAD 當Launch完畢後,會執行一個獨立的容器,畫面如下,URL容器專屬網址,只有自己才可以使用,任何變更都不會寫回Repository上,當你關閉網頁後,再重新進入 https://mybinder.org/v2/gh/kimx/KimInteractiveNotebook/HEAD ,會再產另一個。 本機線上環境 本機可以執行如同MyBinder的環境 安裝Python 指定環境變數 C:\Users\user\AppData\Local\Programs\Python\Python310\Scripts 安裝JupyterLab pip install jupyterlab 安裝.NET 環境 dotnet tool install

.Net Core 在類別庫共用Page及Controller

圖片
前言 今天試著將寫好的API 及Razor Page移到共用的類別庫,讓其他專案可以使用,本以為建好一個類別庫後,搬過去就OK,但代誌沒那麼簡單....花了一些功夫才搞定。 使用方式-Controller 1.類別庫的專案檔,加入Framework參考。   <ItemGroup>     <FrameworkReference Include="Microsoft.AspNetCore.App" />   </ItemGroup> 2.Web專案,引用類別載的API Controller builder.Services.AddControllers()     .AddApplicationPart(typeof(WebApplication2.WebAPI.Controllers.KimController).Assembly); 使用方式-Razor Page 1.類別庫的專案檔: Project Sdk="Microsoft.NET.Sdk. Razor " <AddRazorSupportForMvc> <Project Sdk="Microsoft.NET.Sdk.Razor">   <PropertyGroup>     <TargetFramework>net6.0</TargetFramework>     <AddRazorSupportForMvc>true</AddRazorSupportForMvc>   </PropertyGroup>   <ItemGroup>     <FrameworkReference Include="Microsoft.AspNetCore.App" />   </ItemGroup> </Project> 其它參考 https://curia.me/how-to-use-a-controller-from-another-assembly-in-asp-net-core/ https://github.com/dotnet/AspN

TypeScript Async相容測試

圖片
前言    前幾天與同事在測試某段javascript時,看到 async關鍵字,心想怎麼前端會有這種東東,可以執行非同步....,Google一下後,才知道在ECMA 2017就開始支援了..。 目前的專案使用的是TypeScript+ECMA 5.0,不敢冒然升級ECMA 6+ ~ 2021,因為有年代久遠的裝置,要考慮其相容性。   在不想升級ECMA,又想使用async 等ECMA新功能,該怎麼辨? 別擔心! 舞照跳、酒照喝XD,TypeScript的編譯器會幫你搞定一切,接下來的測試,會說明。 測試 TypeScript - 原始版本 :程式碼會往後端呼叫3次,等每次呼叫完,才會執行下一個     Lab() {             console.log("Lab-Start");             this.AllFunctionsService.GetFunctions((response) => {                 console.log("  Lab-GetFunctions 1");                 this.AllFunctionsService.GetFunctions((response) => {                     console.log("  Lab-GetFunctions 2");                     this.AllFunctionsService.GetFunctions((response) => {                         console.log("  Lab-GetFunctions 3");                         console.log("Lab-End");                     });                 });             });                 } 執行結果 TypeScript - async版本  : await了3次的GetFunction,最後才執行到End,結果同上圖。

SAP - 建立登入捷徑

圖片
前言 SAP GUI 登入時,每次都要輸入,用戶端、使用者、語系等..,有點繁瑣。想要省點功夫的話,可以透過建立捷徑的方式,在每次登入時,自動先帶出相關資訊,來加速登入。 解決方式 1.先點選"連線",針對此連線建立捷徑。 2.輸入登入資訊 3.測試登入,點2下開啟登入視窗,只需輸入密碼即可。 同場加映-使用命令列方式登入 以下修改成自己的密碼,另存成bat,就可以點兩下立刻登入。 C: cd C:\Program Files (x86)\SAP\FrontEnd\SAPgui sapshcut -type=Transaction -system=DS4 -client=110 -user=IT007 -pw=xxxx -language=ZF -command –maxgui4 其它參考 https://noahchou.wordpress.com/2011/08/23/%E5%BF%AB%E9%80%9F%E7%99%BB%E5%85%A5sap-gui-%E7%9A%84%E6%96%B9%E6%B3%95/

Window11-硬碟使用率100%

圖片
前言 早上一開機,電腦卡卡的,心想...我不是才剛將RAM加大嗎? 怎麼會....! 查看工作管理員後,手兇手是CompatTelRunner.exe ,大量的讀取資料。 解決方式 停用CompatTelRunner.exe。 Q:停用它會有問題嗎? A:它是用來診斷系統及運行OS升級兼容性檢查,我的筆電去年剛買,應該不需要。 執行步驟 按Windows + R,輸入 taskschd.msc Task Scheduler Library> Microsoft> Windows> Application Experience 停用Microsoft Compatibility Appraiser 其它參考 https://infoacetech.net/windows/compattelrunner%E9%AB%98%E7%A3%81%E7%9B%A4%E4%BD%BF%E7%94%A8%E7%8E%87/