Azure App Services 如何透過 Azure Key Vault 取得連線字串、密碼與秘密
By : Duran Hsieh因為工作關係,遇到有個 App Services 需要從 Azure Key Vault 上取得連線字串與秘密 (Secrets) 需求。實作的方式相當多種,這次是以角色為基礎的存取控制 (Role-Based-Access-Control) 方式來存取 Azure Key Vault,達到可以不需要儲存任何 秘密資訊 在 web.config 、 appsetting.json 或 寫死程式裡,只有該授權的角色可以取得秘密資訊的效果。本篇文章若有錯誤或任何建議,請各位前輩不吝提出。
Visual Studio Performance Profiler 效能分析工具
By : Duran Hsieh- .NET Async (.NET 非同步)
- NET Counters (.NET 計數器)
- NET Object Allocation Tracking (.NET 物件位置追蹤)
- CPU Usage (CPU 使用量)
- Database (資料庫)
- Events Viewer (事件檢視器)
- Memory Usage (記憶體使用)
- Application Timeline (應用程式時間軸)
- 與 Instrumentation (檢測設備)
如何使用高鐵 TGO 紅利點數兌換高鐵免費車票
By : Duran Hsieh因為工作的關係常常需要搭乘高鐵,累積了不少的點數,這些點數可以用來兌換 車票 與 商品 (詳細兌換內容可以參考 高鐵會員TGO、高鐵會員TGO點數 365)。在累積紅利點數前,記得先申請會員,在購買車票、回數票 與 月票時輸入會員編號即可累積。 整體算起來回饋雖然不多 (約等同票價 9 折),但常常出差的朋友,可以考慮累積點數來兌換車票、商品過過癮。
![]() |
想要累積點數,記得先加入會員 |
ASP.NET Core - 自訂 Health Checks 監控 Shared folder 狀態
By : Duran Hsieh終於到 如何為 ASP.NET Core 與相依服務建立執行狀態檢查 系列文章最後一篇:自訂 Health Checks 監控 Shared folder 狀態。 若讀者有閱讀原始碼: AspNetCore.Diagnostics.HealthChecks(GitHub) 或微軟文件:ASP.NET Core 中的健康狀態檢查,應該會發現 HealthChecks 提供非常多的套件讓你監控多種服務運作狀態。但偶有些想要監控的服務沒有套件支援,那該怎麼辦呢 ? 在這一篇文章我們會給簡單的範例,說明如何自訂方法來監控分享資料夾 (Shared folder) 是否可用。
本篇文章範例位置:HealthCheckDemo ,若覺得講解內容過於陌生,建議從第一篇開始閱讀
ASP.NET Core - 整合 Azure DevOps 與 HealthChecks 於佈署前確認環境運作正常
By : Duran Hsieh注意:因應佈署策略不同,可能會進行停機佈署,須注意不要將正常停機程序,因為Health Check變成阻礙佈署的絆腳石
ASP.NET Core - 整合 Azure Load Balancer/Applicaiton Gateway 與 HealthChecks 進行相依服務監控使用範例
By : Duran Hsieh註: Azure Application Gateway 與 ASP.NET Core HealthChecks 也能進行相依服務監控
ASP.NET Core - 透過 Tags 過濾 Health Checks 資訊
By : Duran Hsieh透過 HealthChecks在監控各種服務時,您能為每個服務加上標籤 (Tags),後續自訂 Health Check Response 時即可透過這些標籤進行過濾動作,只取得/排除特定標籤服務運作資料。當您遇到下列者幾種情境,HealthChecks 的 Tags 可能會幫上不少忙:
- 管理人員/監控軟體 會將服務做分類,會比較方便進行監控與釐清問題,像是以網站/資料庫/儲存體分類
- 依據權限分類,DBA 只能看見目前 資料庫 運作情況,而維運人員可以看見所有服務運作情況
ASP.NET Core - Health Checks UI 圖形化介面呈現服務健康狀態
By : Duran Hsieh經過前面三篇文章的介紹,我們已經知道如何安裝設定 HealthChecks、監控多個相依服務 與 自訂 HealthChecks 呈現結果(呈現每個相依服務)。在這一篇,我們將簡單介紹如何透過相關套件,讓相依服務運作狀態以圖形化介面呈現。
本系列實作的範例程式:HealthCheckDemo
ASP.NET Core - 自訂 Health Checks Response
By : Duran Hsieh透前一篇: Health Checks 監控 SQL Server, WebAPI 與 Redis 健康狀態, 你大概已經知道如何監控不同的服務,但總會懷疑為什麼只能取的整體的狀態態,我們能不能看到每一個服務的狀態呢? 答案是肯定的,本篇文章將簡單介紹如何自訂 Health Checks Response,讓所有的服務運作情況一目了然!
那有美美的圖形介面給老闆看? 答案是有的,在下一篇:ASP.NET Core Health Checks UI 圖形化介面呈現服務健康狀態 會詳細說明。
舊版 Blogger 在 Facebook 粉絲團分享無法顯示圖片問題 (images disappears when sharing blogger post to facebook fan page)
By : Duran Hsieh最近在 Facebook 時常常發現自己舊樣板的 Blogger 無法正常顯示圖片,但在 編輯貼文 或 貼在塗鴉牆時卻可以正常顯示。在透過 Facebook debug tool 處理後,在預覽時可以正常呈現,告知錯誤訊息:
缺少以下必要資訊 og:image
缺少以下必要資訊 og:site_name
缺少以下必要資訊 og:title
缺少以下必要資訊 og:url
ASP.NET Core - 透過 Health Checks 監控 SQL Server, WebAPI 與 Redis 健康狀態
By : Duran Hsieh上一篇文章 ASP.NET Core Health Checks 安裝與設定 中我們簡單說明如何設定並回覆目前網站運作狀態。但 HealthChecks 套件不僅僅如此而已,還能監視 SQL Server(資料庫), Redis(快取服務) 與其他 WebAPI 營運狀態。本篇文章將分別介紹如何設定這三項服務監控,若有錯誤或任何建議,請各位先進不吝提出,謝謝。
本系列實作的範例程式:HealthCheckDemo
ASP.NET Core 如何使用 Redis 分散式快取 (Redis Cache)
By : Duran Hsieh如何為 ASP.NET Core 與相依服務建立執行狀態檢查 (HealthChecks)
By : Duran Hsieh監控在重要系統維運是非常重要的一環,隨時注意 網站、服務、伺服器 與 資料庫 運作是否正常。 在ASP.NET Core 2.2 - 3.1 有個相當好用套件 - HealthChecks,讓開發人員可以透過撰寫簡單設定語法建立健康檢查機制,確認目前服務營運是否正常。他支援的服務相當的廣,除了簡單的 WebAPI、SQL Server,還支援 RabbitMQ、Redis、Azure Service Hub、Kafka、MongoDB、Kubernetes、SignalR...等多項服務 (可以參考 AspNetCore.Diagnostics.HealthChecks - GitHub)
[小技巧] 如何透過 Telegram 電腦版下載群組內所有照片、影像與檔案 (Telegram Desktop Download all photo, video, and files)
By : Duran Hsieh[ASP.NET] SessionState 資料庫在 AlwaysOn 可用性群組,執行 DeleteExpiredSessions 失敗解決方法
By : Duran Hsieh前陣子協助客戶啟用 SQL Server 保存工作階段 (SessionState) 狀態資料過程中,客戶提到 正式環境(Production) 有啟用 AlwaysOn 可用性群組。 而在 啟用 SQL Server 保存工作階段 所建立的資料庫,會建立 SQL Agent Job,定期刪除過期資料 (DeleteExpiredSessions)。 因為 Secondary replica database 為 ReadOnly,故會得到錯誤訊息:
Failed to update database "ASPState" because the database is read-only
透過 SSMS 展開該資料庫 (預設名稱為 ASPState,若建立過程中,有自訂名稱則請選擇正確的資料)。在 SQL Server Agent > 作業 (Job) >看見 ASPState_Job_DeleteExpiredSessions 作業。
[ASP.NET] 在 IIS 上如何使用 SQL Server 保存工作階段 (SessionState with SQL Server)
By : Duran HsiehAzure Windows VM 虛擬機器無法遠端桌面連線解決方法 (內部發生錯誤)
By : Duran Hsieh最近常常遇到運行一段時間的 Windows 虛擬機器 無法遠端連線的情況發生,這裡提供一些常見的情境(忘記密碼 與 內部發生錯誤) 與 解決方法給有興趣的朋友參考。
注意:本篇所提供方法僅供參考,並不為管理上與使用之資訊安全性背書,對於任何使用或引用資料引致之損失或損害,概不負責。用遠端連線有風險,建議若非必要,請使用 Azure 堡壘 (Azure Bastion) 或其他更安全方式進行管理
如何在 Azure 上快速建立 GitLab 服務
By : Duran Hsieh因為工作關係,需要驗證 Azure DevOps Server 與 GitLab 之間,能不能互相整合 repositories,開啟這一篇安裝 GitLab 之旅,並簡單紀錄一下如何快速在 Azure 環境安裝 GitLab 流程,提供習慣使用 GitLab,但又沒有伺服器 (或不想花時間安裝 linux) 的團隊參考。本篇文章若有錯誤或建議,請各位前輩不吝提出。
[小技巧] 透過 Notepad++ 一邊編輯 一邊檢視 Markdown 效果 !!
By : Duran Hsieh近年來, Markdown 語法越來越熱門,他的易讀、快速撰寫的特性深受許多人喜愛,是一種網路內容的寫作、上稿用語言。久而久之,支援 Markdown 的編輯器也越來越多。你知道嗎 ? Notepad++ 除了比對功能,也可以支援 Markdown 檢視 與 HTML 轉換唷 !
資安漏洞評估: HTTP Options Method Enabled 解決方法
By : Duran Hsieh因為工作關係,偶爾需要協助客戶解決關於 IIS 中、高風險資安問題。這邊簡單記錄一下如何解決這次弱點掃描發現的問題:HTTP Options Method Enabled ,並提供給有相同問題的朋友參考
Azure DevOps Agent on Linux 安裝流程說明 (Install Linux Agent)
By : Duran Hsieh前言
Azure DevOps Agent On Linux 與其他 CI/CD 一樣,安裝相當簡單,且可以安裝在 Windwos/macOS/Linux 作業系統上。有很多朋友問到 Linux Agent 與 Windows Agent 有什麼不同,這裡簡單條列一些特性,讓大家理解要哪一種比較適合自己
- Linux Agent 一般情況下,執行速度較快,且 Azure Linux VM 較便宜
- Windows Agent 一般來說較為安全 (對於資安完全沒經驗的朋友,使用 Windows 會輕鬆一點)
- 若您的程式是 .NET Solution (非.NET Core),只能在 Windows 作業系統進行 Build,請選擇 Windows
- Java ...等具跨平台特性 Solution,可以在 Linux 與 Windows Agent 執行
- 找一個您熟悉的平台,安裝套件時比較不會這麼辛苦
本篇文章將一步步說明如何安裝與設定,給有興趣的朋友參考。若有任何錯誤或建議,請各位前輩不吝提出,謝謝。
若您想要知道如何安裝 Agent 在 Windows 上,請參考這篇:
Azure DevOps Agent 安裝流程說明 (Install Windows Agent)
ASP.NET Core 如何將 HTTP 轉換 HTTPS
By : Duran Hsieh過去在開發 ASP.NET 網站應用程式時,若想要使用者強制透過 HTTPS 瀏覽網站,我們會使用 IIS Rewrite Module 來進行轉址。通常會在首頁、註冊/登入、付款...等,網頁進行 Rewrite 進而確保安全性。 在 ASP.NET Core 專案中,開發人員透過現成的 Middleware ,可以更輕鬆的控制路由。本篇文章將簡單介紹如何設定自動將使用者從 HTTP 轉向 HTTPS,若有任何錯誤或建議,請各位前輩不吝指教,謝謝。
註:本文章環境為 .NET Core 3.1
如何免費試用 Azure 雲端服務 (Azure Free Trial) - 2020 年 10月更新
By : Duran Hsieh最近因為協助一些對外活動,需要帶一些 Azure Workshop,簡單整理一下如何啟用 Azure 免費試用帳號步驟給學員,順手記錄在部落格,提供給有興趣的朋友參考。
免費帳號可以提供什麼? (詳細說明可以參考Azure Free Trial 官方網站說明)
- 部分服務12 個月免費,部分 低層級服務 與 少量儲存體、流量 免費
- 部分產品永久免費 (注意:某些產品搭配的服務仍需要計費)
- 30 天內 6100 元點數
下列是注意事項:
註冊雲端服務需要信用卡在 30 天結束前 或 用完 6100 元,帳戶與產品會停用。別擔心,除非您點選升級付費專案 (隨付隨用),並解除消費限制,才會產生費用。
以下是申請步驟 (2020 年 10 月更新)
Step 1. 連結到 https://azure.microsoft.com/zh-tw/free/ ,點選開始免費使用
SSLScan - 瞭解網站是否安全的好用小工具
By : Duran Hsieh因為工作的關係,客戶常常會遇到舊有網站安全性不佳,被要求改善的情況。最基本的包含 停用 SSL 2.0、SSL 3.0,只能使用 TLS 1.2;另一方面,站台所使用的演算法可能也面臨安全性較低的情況,如 停用 DES、RC4 ..等。
您想知道自己的網站是否安全嗎? 當您辛苦改善這些問題後,如何確認沒有問題? 其實您可以透過 SSLScan 工具掃描自己的網站。 您可以在 GitHub 找到 sslscan 開源專案,檢視其相關內容。 接下來,我們將簡單介紹如何在 Windows 環境與 Linux 環境下使用 sslscan 掃描您的網站。
透過 try-convert 工具將 .NET Framework 轉移至 .NET Core
By : Duran Hsieh重要提醒 1:此工具並非萬能,而是透過工具協助您將 .NET Framework 轉換成 .NET Core,大多數的專案或套件都需要再調整
重要提醒 2:此工具有可能直接進行轉換,若遇到無法轉移的程式會中斷且發出錯誤,雖然工具對於修改過檔案會轉換成.old 檔案,但請務必一定要備份原程式!!
嘗試進行轉移前,可以考慮使用 .NET 可攜性分析器檢視可能轉換失敗的部分,請參考:.NET Portability Analyzer 介紹
安裝
2. 開啟 PowerShell 或 cmd,透過下列指令安裝 try-convert
SQL Server CROSS APPLY 與 OUTER APPLY
By : Duran Hsieh介紹
APPLY 主要用於將某一個子查詢和一個 資料表函式 (Table Function) 做 JOIN 運算,有別於 JOIN 運算,APPLY 不使用 ON 選擇關聯欄位,則是將欄位帶入方式使用。子查詢結果會被當作為 left ,而 資料表函式 當作 right 進行運算。
CROSS APPLY 和 OUTER APPLY 是從 SQL Server 2005 新增的語法,其使用時資料庫相容層級要90。這兩個語法效果等同於 INNER JOIN 與 LEFT OUTER JOIN。
這邊舉一個例子來看看 (範例有一點差,但我們直接看效果)
Employee 資料表內容如下
Id | Name | Country |
1 | Duran | Kaohsiung |
2 | Owen | Taipei |
3 | Maze | Taichung |
4 | Bert | Taipei |
Dept 資料表內容如下:
Id | Name | Country |
1 | PM | Taipei |
2 | DEV | Taichung |
3 | DESIGN | Tapei |
4 | DEV | Taipei |
5 | SUPPORT | Taichung |
6 | SUPPORT | Tainan |
7 | IT | Kaohsiung |
首先我們先建立資料表函式
我們使用 CROSS APPLY 語法並看其結果
SQL Server TRANSACTION ISOLATION LEVEL 介紹
By : Duran Hsieh前言
先前對於 ISOLATION LEVEL 非常的陌生,直到這次公司專案遇到資料讀取/更新相關需求才開始認識ISOLATION LEVEL。當資料準確性(像金額資料)要求相當高的情況下,ISOLATION LEVEL 就必須更加嚴謹,但相對的效能就會有所影響,魚與熊掌,不可兼得。
介紹
TRANSACTION ISOLATION LEVEL 大致上可以分成四種:
1. READ UNCOMMITTED
寬鬆級別:A 交易更新但未確認資料,B交易不能更新只能讀取(直到A交易提交後),確保交易更新資料不會有問題。
2. READ COMMITTED
比較嚴格一些:A 交易更新並確認資料前,其他交易不能讀取該資料
官網說明:READ COMMITTED 隨著 READ_COMMITTED_SNAPSHOT 設定而異,請參考最下方餐可考資料
3. REPEATABLE READ
更嚴格一點的限制:讀取中資料會被鎖定,確保同一筆交易中的讀取資料必須相同
4. SERIALIZABLE
最嚴謹的限制:A 交易讀取時,B交易更新要排隊;A交易更新時,B交易讀取與更新都需要排隊
語法:
SET TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
使用方法:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT * FROM TableA
測試
我們使用 Study4 Activity 資料表進行測試,我們挑選 Id = 13的資料進行測試
如何動態組合 SQL 與執行語法 - sp_executesql
By : Duran Hsieh前言
個人接觸到動態組合與執行 SQL 方法,主要的情境在執行 SP 階段,需要動態取得的不同資料庫名稱 (同主機),執行跨資料庫存取資料的時候需要動態語法。實際上若並非必要,個人不太喜歡動態組合語法,主因是非常的難以測試,尤其是執行非常長的語法,讓除錯的困難度增加不少。
IIS 如何對於單一網頁 (或單一檔案) 進行自訂設定 (如:動態IP限制、動態/靜態壓縮)
By : Duran Hsieh趁著連續假期,稍微整理一下常被詢問的問題,發現 "在 IIS,如何對於單一網頁設定動態 IP 限制" 或 "如何對於單一網頁自訂動態或靜態壓縮"。在這篇文章,我們簡單說明如何對於單一網頁、檔案進行唯一的設定。
在 IIS 管理員內,我們能夠過 內容檢視 (Content View) 與 功能檢視 (Features View) 兩個功能來對於單一網頁進行設定,步驟如下:
Step 1. 開啟 IIS 管理員 (IIS Manager),從左邊選單點選要設定的站台或應用程式,點選下方內容檢視。
[Firebase] 使用 Firebase CLI 將靜態網站部署至 Firebase Hosting
By : Duran Hsieh確認並安裝 Firebase CLI
.NET Portability Analyzer 介紹
By : Duran Hsieh最近遇到許多想要從 .NET Framework 遷移至 .NET Core 的案子。雖然許多客戶想要按有一個按鈕,按下後即可直接升級,但現實往往不是這麼理想。轉移工作需要進行事先評估與妥善規劃,多數情況需要適時的重構,才得以順利的轉移。本篇文章簡單介紹轉移前的評估工作:透過 .NET Portability Analyzer (.NET 可攜性分析器) 進行轉移工作評估。若有錯誤或任何建議,請各位先進不吝提出。
若您已經分析完成,想要嘗試使用工具進行轉換,請參考:透過 try-convert 工具將 .NET Framework 轉移至 .NET Core
Step 1. 首先,我們需要在 Visual Studio 2019 上安裝 .NET Portability Analyzer,擴充功能 (Extension) > 管理擴充功能 (Mange Extension)
[小技巧] 解決 Excel 開啟 csv 檔案產生的亂碼問題 (UTF-8)
By : Duran Hsieh最近因為工作關係,需要幫客戶處理大量 csv 檔案。因為 csv 檔案不容易閱讀,客戶希望透過 Excel 開啟並檢視,沒想到卻產生一堆亂碼。 主要原因是我們的 csv 檔案為 UTF-8 格式,直接使用 Excel 開啟,內容會變成亂碼。本篇簡單紀錄如何匯入 UTF-8 格式文字檔案至 Excel,並且解決亂與編排問題。