2018-04-23

IIS 出現 Service Unavailable HTTP Error 503 - Windows Process Activation Service (WAS) Error

這個問題遇到第二次了,照以往的習慣:問題遇到二次以上就要來筆記一下,避免下次再遇到又要花好多時間追查。之前沒有紀錄的原因:一來是覺得狀況特殊不太有機會再遇到,二來就是牽涉到的功能及設定不好模擬,但這次遇到相同問題又讓我花了好幾個小時才確認問題,所以多花點時間準備環境來完成紀錄

這次遇到的問題,外顯的錯誤訊息很籠統,第一時間並不好定位出問題,但搭配 event log 難度就會降低許多,就來看看實際的狀況為何吧

2018-04-22

C# 使用 Dapper 連線 DB 時指定逾時時間 (timeout):0x80004005

最近專案在 production 環境執行時常常遇到 [Win32Exception (0x80004005): The wait operation timed out],造成程式未完整執行,但再執行一次後又正常了,想當然爾這個狀況在開發階段未曾發現過(再次證實在我的電腦上都是好的XD),經過追查 log 後發現是 db 資料量略大,加上查詢語法在目標 db 上沒有建立對應的 index,所以執行查詢時都會耗費較多時間,但第二次之後的查詢則因為第一次查詢的犧牲已 trigger db 協助建立相關 cache,讓後續查詢得已順利完成

追查問題的過程中,發現沒能在第一時間快速精確鎖定相關設定解決問題,所以馬上紀錄一下加強印象

decimal , double , float 輸出 json 的格式問題

之前筆記 decimal 屬性輸出 JSON 時指定的格式問題 提到在專案中因為系統介接需要統一 decimal 小數位數,過程中也才發現 json.net 在輸出沒有小數的 decimal 時行為不太一樣(會補上 .0:小數點及小數點一位),最後雖然有解決問題,但解決方式自己卻不甚滿意,加上想要順帶測試 double 及 float 的行為,所以又花了一些時間找其他方法,就來看看過程遇到的問題及最後的解決方式吧

2018-04-21

decimal 屬性輸出 JSON 時指定的格式問題

這是之前專案遇到的狀況:輸出 金額 時只需處理到小數點下二位。既然是 金額,為了避免精準度造成的誤差都會選用 deciaml 資料類型,而在 db 中使用 money 儲存(因為業務需求面沒有運算需求可以使用,如果會有運算 money 有失真的風險,詳細內容請參考 欄位開立(2) - decimal, numeric, float, real, money 的抉擇),預設精準度為小數點下四位,為了符合目前系統的要求(小數點下二位),就需要調整輸出,來看看可以怎麼做吧

2018-04-17

清除 Windows 上的 git 驗證資訊(Credential)

公司電腦的安全性設定要求固定時間需要修改個人 AD 密碼,連帶其他內部系統密碼也會一並被修改,之前修改 AD 密碼後,密碼驗證失敗會彈出錯誤訊息要求重新輸入,但最近卻出現吐出驗證失敗沒有要求重新輸入,造成與 git server 的交互動作全部失敗,順手紀錄一下個人做法:將 Windows 上紀錄的 git credentials 清除,需要與 git server 溝通時重新輸入

2018-04-12

使用 Topshelf 搭配 Quartz.Net 撰寫 Windows Service 排程執行工作

排程工作在許多系統中都是必備組件,常用來處理非立即性作業(e.g.:每日交易結清,發送電子報...etc),如果沒有特別要求或限制下做法非常多:像是 host 在 web application 下的 web background runner : Quartz.Net 與 hangfire 或是 console + scheduled tasks ,另外就是今天要紀錄的 Windows Service + timer 功能,都可以達到排程執行目的

雖然今天要紀錄的內容目標是 Windows Service + timer,卻也有些不同,會透過 console 應用程式與 Quartz.Net 來實作,並使用 Topshelf 來安裝,其中 Topshelf 是套用來簡便建立 Windows Service 的 framework,可以直接撰寫 console 應用程式讓整個開發及偵錯更為容易,完成功能開發後再將 console 應用程式安裝為 Windows Service 而 Quartz.NET 則是排程 framework,移植自 java 上的 Quartz. 立馬來看看如何實作吧

2018-04-10

使用 RedLock.net 搭配 redis 達成分散式 Lock

RedLock.net 是前兩個禮拜從安德魯大大的 架構面試題 #1, 線上交易的正確性 一文中看到使用 redis 搭配 RedLock 演算法製造出分散式鎖定 (Distributed locks) 的套件,也是 Redlock distributed lock algorithm 在 C# 上的實作之一,主要相依於 StackExchange.Redis 套件(實作 Redlock 的其他程式語言及套件可以參考 Distributed locks with Redis)

當下看到安德魯大大介紹,立馬回想起過去為了達到分散式鎖定苦思了許多但還是沒有想到好方法的冏況,終於有機會突破當時的技術瓶頸,恰巧最近需要重構一段程式碼從本機的 object lock 改為分散式鎖定 (Distributed locks),正好可以透過實戰來上手效果更佳

2018-04-09

使用命令列指令 (VSTest.Console.exe) 執行 MSTest V2 測試

之前筆記 使用 MSTest.exe 指令來進行測試 曾經介紹到使用 MSTest.exe 在 cmmand line 環境中執行測試,筆記結尾有提到未支援 MSTest V2 的測試功能,在原本使用 MSTest V2 專案不多的情況下影響不大,但近期專案為了使用 Live Unit Testing 逐漸改用 Visual Studio 2017 搭配 MSTest V2,除了開發階段方便外,為了讓 CI 充份發揮功能,得另外調整 unit test 的語法,就來看看該如何使用命令列指令執行 MSTest V2 測試

2018-04-08

ASP.NET Web API Unit Test 出現需要加入 `System.Web.Http` 參考錯誤

為 ASP.NET Web API 加上 unit test 時,在加入 action 實際動作後 Visual Studio 就提示需要加入 System.Web.Http 參考,仔細回想這個問題也不是第一次遇到了,只是過去都是直接手動加入 System.Web.Http 參考先解決問題為主,但因為直接加入 System.Web.Http 參考會直接相依個人電腦上的設定容易造成其他團隊成員無法取得 System.Web.Http 或是 CI server 無法順利執行測試

所以趁這個機會紀錄一下正較的做法,以供日後參考

2018-04-07

加快大型 GIT Repository 下載速度(指定 depth)

同事反應有個專案在經年累月的發展下,快速成長到每次 clone 都要個十幾二十分鐘,後來甚至有次在 production deploy 時還完全卡死,無法正確 pull 新的 code

在檢查無法 pull 的過程中,發現光只是 clone 就讓我失去耐心了,所以分享給同事只抓最後版本的做法(發現用自己筆記分享做法給同事超省事還能 reuse ,超棒的 哈哈)

2018-04-06

匯出 Excel 時使用多國語系 Resource 當做欄位名稱

之前筆記 使用 C# 將資料匯出成 Excel (.xlsx) 紀錄到使用 ClosedXML 搭配 generic 與 reflection 匯出 excel,方便使用者自行調整資料報表

剛好有個系統需要支援多國語系,連帶地使用者對要求 excel 也需要有多國語系,雖然資料內容無法隨意改變,但 excel 的欄位名稱就有調整的空間,就來看看可以如何處理吧

2018-04-05

使用 C# 將資料匯出成 Excel (.xlsx)

雖然大部份系統都會有報表相關功能,只是多數情況都無法在系統建置時就設想到所有使用者需求,加上常常功能需求的優先程度會被報表高不少,所以就會透過將資料匯出成 Excel 讓使用者自行組裝成需要的格式及內容以應付需求就成了最有效率的方式

針對匯出 excel 的需求,前幾天同事問到相關問題,才發現我連匯出 excel 的基本功能沒有做過筆記,所以立馬來補紀錄一下囉

2018-04-04

使用 C# 將資料匯出為 CSV

最近有個需求是將部份資料內容倒進其他系統中,主要計劃是打算透過目標系統所開發的 restful api 來 insert 資料,但在實際透過 api 交換資料之前最重要的工作當然就是確保資料格式跟內容都是正確的,經過討論後決定將資料匯出成 CSV 讓目標系統相關人員 review 匯出的資料內容是否合乎要求

收到這個需求時,雖然知道難度應該是不高,只是沒有很確定的想法,還試著找過有沒有好用的套件,最後還是索性自己動手,順手紀錄一下

2018-04-03

ASP.NET Identity 如何依據不同用途設定個別 Token 時效

之前曾經筆記中 改 ASP.NET Identity 2 的 Token 時效 紀錄到 ASP.NET Identity 預設的 token 時效及調整方式。在專案實際使用時,user 提出其他需求:依不同功能別而有不同的 token 時效,例:註冊新帳號 - 確認 E-mail 的時效為 24 小時;忘記密碼 - 重設密碼的時效為 15 分鐘

針對這個需求,有好幾個可行方案閃過,但沒有實際驗證過誰也說不準能不能用,所以立馬來試試看囉

2018-04-02

如何增加 VirtualBox VM 空間

為了測試網站相容性,打算透過 VM 來安裝可能有資安疑慮的瀏覽器,避免影響到主要開發用電腦,只是在建立 VirtualBox VM 時並沒有預期會有其他軟體所以起始的配置空間不足而無法安裝瀏覽器

雖然重新製作新的 VirtualBox VM 可以徹底解決問題,但重新安裝 OS 有些太浪費時間了,所以就來看看如何擴充 VirtualBox VM 的空間吧