TIPS - C# 讀取 Oracle dbms_output.put_line 輸出資訊
使用 dbms_output.put_line() 列印執行資訊是常用的 Oracle Stored Procedure 偵錯技巧,以下 Procedure 範例在DELETE 及 INSERT 後透過 dbms_output.put_line() 印出影響資料筆數,概念跟在程式碼裡塞入一堆 Debug.Print、MsgBox、alert() 差不多,是執行期間追查問題的重要線索:createor...
View ArticleC# 讀取 dbms_output 效能強化版
前文介紹過使用 C# 讀取 dbms_output 寫入內容,範例留了一個小尾巴,跑迴圈連資料庫犯了效能大忌,應改成一次執行或查詢取回才上道。dbms_output.get_lines()允許一次取得多筆訊息,但傳回型別為 TYPE DBMSOUTPUT_LINESARRAY IS VARRAY(2147483647) OF VARCHAR2(32767); 讀取要費點手腳,Oracle...
View Article2018 烏來峽谷馬拉松(Y拖初馬)
大概是去年把跑馬運氣用完了,今年的馬拉松行程在 16 度冷雨中揭開序幕 - 烏來峽谷馬。氣象預報下雨機率 100% 心頭涼了半截,下雨天的山路馬對我根本是黑指甲保證班呀! 跑完第一件事就是檢查腳趾,然後開始「紅腫 -> 黑青 -> 指甲剝離 -> 脫落換新」的循環。去年跑完扶輪馬後入手江湖傳說很好跑的母子鱷魚氣墊夾腳拖鞋,俗稱「Y...
View ArticleASP.NET MVC 回傳 HTTP 400 Bad Request 並附加錯誤訊息
同事的專案遇到以下需求:依規格實作 WebAPI (考量開發彈性,使用 ASP.NET MVC Controller,未走 ApiController ),規格定義遇到某些狀況需抛回 HTTP 400 Bad Rquest 並以 JSON 格式回傳錯誤訊息。一開始的寫法如下:public ActionResult BadRequestFail() {...
View ArticleIIS HTML 檔 Cache 行為觀察
跟同事討論到:「IIS 在靜態檔案更新時會強制瀏覽器讀取新版本嗎?」HTTP Header 有不少與 Cache 管理有關,協助瀏覽器用 Cache 減少網路傳輸量,例如:Cache-Control、If-Modified-Since、ETag… 等。要了解這些技術細節,推薦幾篇文章:循序漸進理解 HTTP Cache 機制 - TechBridge 技術共筆部落格HTTP 快取 - Web -...
View Article【茶包射手日記】Safari 回上頁時無法停用 Cache
使用者報案,專案網站使用 Safari 檢視,在切換頁面時殘留載入中訊息,但使用 Chrome/IE 則一切正常。專案網站有個主目錄網頁,點選切換其他功能網頁前會 $.blockUI 顯示"網頁載入中,請稍侯..."訊息,由於頁面很快會被新網頁取代,故沒必要關閉載入中訊息。而網頁有加 <meta http-equiv="cache-control" content="no-cache">...
View Article【茶包射手日記】T470p 藍牙失效疑雲
小黑 T470p忽然連不上藍牙滑鼠,控制台顯示藍牙已關閉,而啟用停用藍牙的開闗也不見了。裝置管理員裡的藍牙項目消失,「通用序列匯流排控制器」則冒出一個「未知的 USB 裝置」,研判電腦忽然不認得藍牙裝置搞的鬼。嘗試更新「未知的 USB 裝置」驅動程式,系統顯示已是最新版本,重新開機亦不見改善。到官網重新下載藍牙驅動程式安裝無效,但我注意到一件事 - Intel 8265 Wireless...
View ArticleHangfire 筆記1 – 使用 SQLite
Hangfire是一套支援在 ASP.NET MVC 站台跑背景作業或排程的好用程式庫,可以將作業丟到背景執行、延遲執行或排定時間定期啟動,並且網頁管理介面、支援失敗重試等功能。如使用資料庫作為任務儲存區,即使網站重啟工作也不會遺失,功能十分強大。Hangfire 開源且可免費用於商業用途,付費版 Hangfire Pro則多了批次作業中斷接續執行、批次作業流程設計、Redis...
View ArticleHangfire 筆記2 - 執行定期排程
想用 ASP.NET Hangfire 跑定期排程,有一個前題是「需確保網站永遠處於執行狀態」,先推薦幾篇相關文章:[ASP.NET]使用 Hangfire 來處理非同步的工作 - 亂馬客 - 點部落[IIS]為什麼應用程式集區設定了 AlwaysRunning 沒有效果呢- - 亂馬客 - 點部落Making ASP.NET application always running —...
View Article徹底移除 IIS Response Header 版本資訊
從 IIS Reponse Header 移除 Server、X-AspNet-Version、X-Power-By 等版本資訊,可降低因曝露資訊被鎖定攻擊的機率,被視為提高資安防護的手段(效果高低見仁見智,但有些資安掃瞄將此列為弱點,不做也得做)。這已算是個老話題,網路上有不少討論與參考文章:mrkt 的程式學習筆記- ASP.NET MVC - 移除特定的 Response Headers...
View Article2018 渣打馬
跑過三屆渣打馬,每次都有精彩回憶。2014 年第一次跑渣打馬,初嚐起跑與終點不同的玩法,勉強擠進 SUB5。2016 年遇上 44 年難得一見的霸王級寒流,頂著 4 度低溫,整場跑了五次廁所,排隊尿尿排到我都崩潰了,所幸保住 430。2017 年絕對是最難忘的一場,是我跑馬生涯的里程碑。不知吃錯什麼藥,拎杯居然跑進許多跑者心中的強者門檻 - SUB4,還一舉突破傳說中的「陳冠希障礙」,以...
View Article使用 Razor 產生客製化 Email 內容
多年下來,寫程式發 Email 通知的需求做過 N 回,其中寄給客戶的通知為求美觀常需採用 HTML 格式,而客戶姓名、通知內容等要隨客戶動態改變,嚴格來說也是一種套表。過去我慣用一套自己發明的「特別註記+Replace」做法,例如:var tmpl = "<span>[$Name$]</span>...
View ArticleTIPS–7-Zip 壓縮時略過特定目錄或檔案
這是我常遇到的困擾 - 壓縮打包 .NET 專案時,packages、bin、obj 等目錄下的 DLL 檔常讓檔案大小暴增數十倍,而這些檔案可透過 NuGet Restore 或重新編譯產生,基本上不需要保留。如果能在壓縮時略過這些資料夾,預期可省下可觀的體積。平時我都用免費且開源的 7-Zip壓縮解壓縮(題外話,如果你己經「免費試用」試用期只有 40 天的 WinRAR 了十幾年,可考慮改用...
View Article【茶包射手日記】老 Bug 新感受之 ODP.NET 版本問題
同事報案。某個使用 Managed ODP.NET 的測試網站吐出以下錯誤 Error: The type initializer for 'OracleInternal.Common.ProviderConfig' threw an exception.同事一度懷疑跟 ODP.NET 版本有關,但依經驗,如為版本問題錯誤訊息會確指出所需元件全名、版號等資訊。為調查問題,我直接在 IIS主機現場撰寫...
View Article實戰小技巧 - .NET Exception Message、InnerException 與 ToString()
前篇文章提到 try catch 時若只保留 Exception.Message,可能遺失 InnerException 及 StackTrace 錯失破案重要線索。文章迴響顯示這是個值得介紹的實戰技巧,故再補充一篇。在某些應用情境我們會選擇使用 try … catch 達成特定目的,例如:(註:Exception...
View ArticleIIS HTTP 強制轉 HTTPS 簡易做法
再遇到老題目:在 IIS 上如何將 HTTP 請求強制導向 HTTPS?之前試過顯示說明網頁,倒數後透過 JavaScript location.href 轉向 HTTPS 的做法 - 設計賓至如歸的HTTPS強制導向網頁。但這有個缺點,如果不需要顯示導向提示,則先 HTTP 200 送回正常網頁再由瀏覽器另外發出請求連上 HTTPS 多耗費一次往返,不如直接回傳 HTTP 301/302...
View Article【茶包射手日記】VS2017 錯誤清單出現 TypeScript 版本相關錯誤卻可編譯
之前處理過 VS2017 更新導致 TypeScript 出現大量 is not assignable to 錯誤問題,若暫時不打算改寫 TypeScript 升級 2.4+,確保專案 TypeScript 版本設定維持在舊版即可。但實際使用發現有個困擾:雖然編輯及使用都正常,但 VS2017 的錯誤清單視窗(Error List)冒出大量 is not assignable to...
View Article捉鬼記 - Google 搜尋結果被穿插廣告
近來在筆電用 Chrome Google 查東西怪怪的,搜尋結果出現後一兩秒,最上方會冒出幾則 AdSense 廣告,廣告項目的樣式偽裝成一般查詢結果,還會隨機插穿於正常結果之間,閱讀結果時得自行剔除還常不小心點到,讓人肚爛到極點。一度懷疑是 Google 網站改版想藉此增加廣告營收,但經過分析很快排除此一可能,理由如下:搜尋結果先出現,廣告是被疊加上去的。有時還會先看到標準 AdSense...
View Article元件開箱:Managed ODP.NET for Linux
.NET Core 版本已推進到 2.0,但對我而言,相關元件、程式庫的支援度才是能否用於工作的關鍵。最近有則好消息 – Oracle 在這個月推出 ODP.NET Core 12.2 Beta,感覺在工作專案使用 .NET Core 的日子又更近了~ 工作環境常會存取 Oracle 資料庫,.NET Core 再好用,連不上資料庫也是白搭。ODP.NET Core 補上這塊拼圖,背後的另一層意義是...
View Article