ActionFilter Attribute 共用特性與狀態保存
同事報案,某個 Web API 會不定期出錯。進一步調查是近期啟動的一個新排程同步發出多個 API 呼叫,當 Web API 同時被多方呼叫,Web API 加掛用來寫 Log 的 ActionFilter Attribute 偶爾會發生 Dictionary.Add 重複加入相同鍵值的錯誤。因 Dictionary 被設成 ActionFilter Attribute Instance...
View Article好問題:GUID 真的不會重複嗎?
前幾天,「系統產生的 GUID 是否可能發生重複?」在辦公室引起熱議。我主張:GUID 透過網卡 MAC 地址、產生時間以及一些機制(防止同時間點產生兩筆或時鐘往回調)確保世上任何電腦都不會產生相同 GUID,只要所有電腦的 MAC 地址沒有亂來,理論上不可能發生重複。這說法挺有說服力,解除了大家心中的疑慮。BUT,禁不住好奇爬了文,這才發現「我錯了!」倒不是不該信任 GUID...
View ArticleWinDBG 應用實例:找出 ASP.NET CPU 100% 原因
故事是這様的,我們有一批網站搬到新主機出現詭異現象:每隔一段時間某些 IIS AppPool Process 會吃滿 25% CPU 使用量,在 4 核機器這象徵有一條 Thread 陷入無窮迴圈吃光一個 CPU Core 的時間。有時也會出現多個 AppPool 同時發難,每個 Process 吃 25%,把整體 CPU 使用率逼上 50%、75%,甚至 100%。出問題時,該 AppPool...
View ArticleASP.NET CPU 飆高問題之傻瓜分析工具-DebugDiag Tools
昨天使用 WinDbg 追查 ASP.NET CPU 100% 原因的文章得到不少朋友的回饋,其中 Robert Hu 留言提到一個更方便的 Dump 擷取與問題分析工具,試用之下果然犀利,在此補上介紹。Debug Diagnostic Tool (DebugDiag) 是微軟針對程式當掉(Crash)、當住(Hang),以及記憶體洩漏(Memory Leak)等問題設計的快速偵察工具,目前最新版為...
View ArticleOracle 追討 Java 授權費議題之研究心得
前陣子有 Oracle 對企業追討 Java 授權費的新聞搞得人心惶惶:Oracle 開始追討 Java 授權費,企業客戶頭痛 - TechNews 科技新報Java用戶注意! 傳甲骨文開始加強取締未經適當授權用戶 - iThome被很多人問到「為了跑 Java 程式裝 JRE/JDK 也會被收錢嗎?」「裝什麼版本才會被收錢?」…身為 Java...
View Article2017 渣打馬拉松與 SUB 4 之夢
跑馬當踏青,荒唐一整年,總得有場玩真的,渣打馬就是你了!去年渣打馬遇到連貓空都下霰的霸王級寒流,今年雖是暖冬,渣打馬照例再跟入冬最冷寒流強碰,原本預測將到 10 度以下,最後是 11 度的乾冷天氣。老天爺送上大禮,加上近來無傷無痛,這様還破不了 PB(個人最佳成續)豈不人神共憤,天地不容?賽前我還很假掰認真地參考...
View Article公告:Facebook 粉絲專頁破萬抽獎活動
剛圓了 SUB4 之夢,部落格也悄悄跨過另一座里程碑-黑暗執行緒臉書專頁按讚數破萬了!(轉圈灑花)PS:咦?好像有人衝去退讚了…...
View Article使用 Process Explorer 查看 .NET Callstack
WinDbg 追查 CPU 飆高問題一文發表後,在 FB 收到網友 Webber Han 回饋(在此感謝),提到射茶包利器 Process Explorer也能像 WinDbg 一樣檢視 Callstack 中的 .NET 組件、函式資訊,查了一下,這是 2012 年 15.2 版就加入的功能,Lag 大了。關鍵在於「Configure Symbols」有無設定妥當,Process Explorer...
View ArticleTIPS-以不同使用者身分執行程式
在一些情境下,我們需要切換成其他使用者身分執行程式,例如:以 UserA 登入 Windows,因特殊需求改用 UserB 帳號啟動特定程式。一個經典範例是 SSMS,如下圖所示,當選擇「Windows Authentication」認證方式,Username 欄位固定為當下登入帳號,無從改變。要改變 SSMS 中的 Windows Authentication...
View Article在 TFS 2012 Build Service 編譯 VS2015 專案
工作環境用的是 TFS 2012 Build Service,最近要編譯 VS2015 專案,程式用到 C# 6.0 超好用的字串插值寫法當場被打臉,得到 Unexpected character '$' 錯誤。原因很明顯,VS2015 改用 Roslym 編譯器,TFS 2012 Build Service 上沒裝是要編個屁?經過一番摸索(還學到 TFS...
View Article查詢 SQL Server 詳細版本資訊
資安更新作業需確認 SQL Server 詳細版本資訊,需細到 Service Pack 及累積安全更新,爬文查到超好用的 SQL Server 版本資訊偵測腳本。這組自動偵測腳本由微軟OneScript Team提供,可顯示版號、產品名稱、產品層級(Service Pack 版本)、版本別(Express、Enterprise、Developer…)、32 / 64 位元、Service Pack...
View ArticleWindows Open JDK 替代方案研究
前陣子分享過 Oracle 追討 Java 授權費議題的研究心得,原以為誤用同綁安裝的進階商業功能是主要陷阱,但依最近蒐集到的情資,發現對企業用戶而言,「General Purpose Computing」才是天大的坑。依據 Binary Code License(BCL),Java SE 8 只可免費用於「General Purpose Computing」,用於 Embedded Device...
View Article【茶包射手日記】程式安裝與解除安裝疑難排解員
來了!來了!從山坡上輕輕地爬下來了。Visual Studio 2017 3/7 RTM囉~家裡跟公司有好幾台機器要裝,照著小朱的教學文抓好離線安裝包(我選 Enterprise 英文版,全部安裝檔約 20.6 GB),避免逐台重複下載耗時費頻寬又不環保。按照慣例,身為茶包射手體質異於常人,安裝 Visual Studio 一次 OK...
View ArticleWindows 停用 TLS 1.0 之配套作業整理
開始之前,說說 TLS。大家朗朗上口的 SSL(Security Socket Layer),最早源於 1995 年發表的 SSL 2.0(1.0 很雷,所以從沒公開過),隨後在 1996 推出 3.0 版,IETF 於 1999 年將 SSL 標準化,因版權考量改稱為 TLS(Transport Layer Security)。就技術而言, TLS 1.0 與 SSL 3.0 很相近,而 TLS...
View Article客製靜態檔案 HTTP 404 訊息
同事報案,某組 Windows 2012R2 Web Farm 均已設定 web.config <customErrors mode="On" /> HTTP 404 網頁理應如下:但 Web Farm 其中一台卻會顯示詳細錯誤,導致實體路徑資訊外洩:最後同事找出原因,IIS Error Pages 設定有個 Edit Feature Settings,問題主機被設成「Detail...
View ArticleDapper +Oracle 之 DateTime 注意事項
同事報案,我先前寫的 Dapper 共用程式庫有 Bug,當 WHERE 條件包含日期型別時,將 DateTime 寫入 Oracle Date 欄位,接著用同 DateTime 值做 WHERE 比對,竟找不到剛才寫入的資料。用以下範例重現問題:using (var cn = new OracleConnection(csOra)){ cn.Open(); cn.Execute("TRUNCATE...
View Article【Coding4Fun】注音符號輸入字盤及國字轉注音解決方案
小木頭國文實力有點虛,看在常靠國文騙吃騙喝的老爸眼裡不免焦急。結果,皇帝不急急死太監,我跟著看課文、自己出測驗題,忙得不亦樂乎,但求力挽狂瀾…但每次出題要輸入一串純注音符號總叫我抓狂,先前沒學到好方法在電腦快速輸入「純注音符號」?我只會用注音輸入法再選字,操作步驟略嫌繁瑣,加上平日用倉頡對注音輸入操作不熟,輸入速度跟繡花有得拼。靈機一動,想到好久沒寫 WPF...
View ArticleVS2017 無法載入專案,出現 compiler could not be created 訊息
從 VS2017 RTM 起我就一律改用它開發專案,還算順利沒啥問題。今天則遇到一起小錯誤,某個從未用 VS2017 開啟過的專案,開啟時發生專案載入錯誤,出現以下訊息:Project 'Blah' could not be opened because the Visual C# 2017 compiler could not be created. An item with the same...
View ArticleOracleParameter 型別不符導致 ORA-03111 通訊中斷錯誤
記錄在 Oracle 遇到的古怪錯誤。Oracle Server 版本 10.2.0.4 64bit,Client 端用 Managed ODP.NET 12.1.24160719(取自 NuGet),某段程式碼誤傳 Varchar2 OracleParameter 與 DATE 欄位進行比對,預期應出現型別不符錯誤,但得到錯誤訊息為 ORA-03111 在通訊通道上收到中斷訊號(Break...
View Article由 Dapper 傳回 dynamic 物件取得欄位清單
不用預先宣告強型別,查詢資料表後直接傳回 dynamic 是 Dapper的強項,例如:var list = cn.Query("SELECT Col1,Col2 FROM T).ToList(); 將傳回 List<dynamic>,用 list.Fisrt().Col1 就能讀取欄位內容,簡潔又方便。最近有個花式應用,想用通用函式接收 Dapper...
View Article