2018-07-30

將 ASP.NET Identity 加至 ASP.NET MVC Empty 專案中 - MongoDB 版

在之前筆記 將 ASP.NET Identity 加至 ASP.NET MVC Empty 專案中 中有提到我個人事實上比較喜歡 MVC Empty 專案範本的乾淨風格,當時也是因為不想讓專案中有過多預設套件及程式碼特別紀錄如何從 Empty 專案範本來逐步加入 ASP.NET Identity,最近專案剛好有用到 MongoDB 來儲存 ASP.NET Identity 資料 (詳細內容請參考 使用 MongoDB 儲存 ASP.NET Identity 資料),所以順手紀錄一下如何逐步將 ASP.NET Identity 搭配 MongoDB 加至 ASP.NET MVC Empty 專案中

2018-07-20

使用 MongoDB 儲存 ASP.NET Identity 資料

近期處理的某個專案需要 website 來呈現報表類資訊,起初 user 說只需要基本的登入,不需要其他使用者相關功能(e.g. 修改密碼、權限管理、帳號申請...etc),於是便透過 如何在 ASP.NET MVC 加上簡易表單驗證 中提到的小技巧快速地完成了一個有登入功能的網站,不過 user 在使用過幾次後還是覺得使用者相關功能 nice to have,但尷尬的事來了:user 一直覺得 website 有 "完整" 的使用者功能,只是未開放 "登入" 之外的其他功能,殊不知在建立 website 登入機制時根本連 DB 權限都沒申請,相關使用者 credential 資訊都存在 web.config 中

後來想到該 website 原本就有專屬的 MongoDB 來儲存相關 log,於是興起將 Identity 資料儲存在 MongoDB 的念頭,立馬來看看如何使用 MongoDB 搭配 ASP.NET Identity

2018-07-17

讓 NLog 發送 Mail

曾經在之前筆記 讓 log4net 收到指定錯誤 Level 發送 mail 紀錄到透過 log4net 的 appender 設定讓出現指定 log Level 時自動發送 mail,當時就覺得 NLog 在設定的便利性上與文件的可讀性上有不少優勢

最近手邊另個專案也希望在程式補捉到 Error 或是 Fatal 等級的訊息時發送 mail,不同的是這個專案採用 NLog,過程中發現部份設定記憶日益模糊,趁著專案需要順手整理一下

2018-07-16

使用 WinDbg 查出 Redis OOM - Out of Memory

Session 是網站開發時既方便又相對 Cookie 安全的資料儲存技術,但 Session 弱型別的特性容易造成程式碼可讀性降低,另外 Session 將資料儲存在 server 上的特性也會影響 server 效能

Session 的優劣相信大家心中各有自己的標準,沒有絕對一致的看法,只是以我個人而言近幾年的新專案中已大幅降低了 Session 的使用,主要就是希望可以提高程式碼的可讀性

公司有部份網站使用 Session 來儲存資料,加上希望跨多台機器存取而利用 Redis 來當做儲存媒介,最近公司的大型活動讓 user 來訪數大增,也讓 Redis 用量超出預期而出現錯誤,剛好利用這次機會紀錄一下使用 WinDbg 找到 Redis OOM - Out Of Memory 的過程

2018-07-13

取得 Redis 中指定 key 條件的筆數

公司有個流量很大的 ASP.NET MVC 網站仍在使用 Session,並利用 Redis 來儲存 Session 資訊,而近來的大型活動讓 Redis 壓力倍增,使用的 memory 是活動前的 2-3 倍,於是興起清查 Redis 各式來源使用量的念頭

經過嘗試了幾種做法,對最後解決方式的執行時間還算滿意,順手紀錄一下各種方式的優缺點待日後備查

2018-07-11

使用 HttpClient 出現 ObjectDisposedException ?!

最近某個專案中有個需求需要對 partner 發出 http request,而 user 針對 request 出現 error 時希望加上 retry 機制:重試一次,結果就是這個重試一次的要求讓程式出現預期外的 Exception,立馬來看看我犯了什麼錯吧

2018-07-09

System.IO.FileLoadException : Could not load file or assembly (0x80131040)

前情提要:公司有個專案需要與外部 partner 周期性進行資料交換,是常見的排程作業但 partner 沒有提供測試環境,加上 partner 的 api 環境有鎖定來源 ip,也就是所有的功能開發都需要憑空想像或是透過 production 來 debug XD 雖然不是第一次遇到這種需求,但還是覺得無力感很重呀

不過就是因為這個專案的特殊性才讓我遇到 System.IO.FileLoadException : Could not load file or assembly 問題,當下我花了一陣子才想到原因加上違反正常 CI/CD 流程,特別筆記一下加深印象

2018-06-25

解決無法使用 IIS Manager 及 AppCmd.exe 列出 Worker Processes 的 Request

最近監控 IIS 上的 application 時發現部份 server 無法列出 request queue,以我的經驗一般情況下並不會特別去看 request queue 的內容,一旦需要看就一定有 server 或是 application 警示出現,如果看不到內容對於除錯就少了可以快速定位發生原因的手段,也就增加偵錯的時間

原本以為是 IIS Manager GUI 的問題,改用 AppCmd.exe 來看內容也出現錯誤,就來看看如何解決吧

2018-06-18

WinDbg 設定 symbol file path 的四種方法

有一陣子沒用 WinDbg 來進行偵錯,再次感受到年紀的影響,指令忘得很乾淨XD 當然 WinDbg 的指令對我而言本來就沒有記得很牢,忘得快也是意料中的事,剛好最近用到的機會高一些,每次查指令也滿花時間的,所以趁著連假時間做個紀錄以利之後追查問題可以再加快速度。

首先就來看看如何設定 symbol file path ,雖然 symbol file path 沒有特別設定也可以正常使用,不過每次都重新下載 symbol file 既耗時又浪費網路頻寬,因此透過設定 symbol file path 讓已經下載過的 symbol file 可以重用讓偵錯流程可以再加快,把握時間找出真正的問題

2018-06-16

Docker Push 出現 405 Method Not Allowed 錯誤?!

之前筆記 解決 Docker build pip install fail 提到在練習 Kubernetes 過程中執行 docker build 指令時會出現 pip install fail 的 error,問題發生原因是 docker 的 DNS 解析不正確造成的,解決方式是設定 Docker 的 DNS。

完成 docker build 產生的 image 只會存在執行指令的機器上,除非手動打包 image 至其他 Kubernetes Node 上,否則在執行 Kubernetes 部署時會出現找不到 image 而出現部署失敗的錯誤訊息,但 Kubernetes Node 可以動態增減,手動複製並沒有真正解決問題,透過將 image push 至 registry 才可以一勞永逸,只是想不到一個 docker push 也讓我卡關了XD 就來看看問題發生原因及解決方式吧

解決 Docker build pip install fail

近期工作之餘將部份時間花在學習 Kubernetes 上,過程中嘗試透過 Dockerfile 建立 pyhon application 的 image 來部署至 Kubernetes 中打算用來做一些實際應用情境的演練,原以為會卡在 Kubernetes 的網路設定上,想不到我太過樂觀,連第一步的 Dockerfile 都 build fail,如果沒有 image 更不用提建立 container 及部署至 Kubernetes

因為 Kubernetes 相關知識尚未上手,非常容易踩雷碰壁,為此我還重建了好幾次 VM 來反覆驗證測試,過程中也遇到好幾次 Dockerfile pip install fail 的狀況,每次都要重新查設定方式,於是就來筆記一下囉

2018-06-10

C# 搭配 MongoDB 的連線寫法

最近有個新專案需要儲存 json 格式的資料,MongoDB 是考慮的選項之一,評估的過程中才發現我沒有 C# 連線 MongoDB 的使用筆記,雖然專案時程非常急迫需求假日額外加班處理,原本很認份地要開工但仔細想想工作畢竟是工作就算再急也不該為了工作失去熱誠,雖說我自己常常額外加班不過都是出於對程式熱誠,一旦只是為了對專案有所交待,我愈來愈說服不了自己,所以決定在休假期間放下時程的考量做自己覺得開心的事

立馬就來紀錄一下 MongoDB 的連線寫法吧

2018-06-07

C# 連線 Oracle 出現 ORA-01000: maximum open cursors exceeded

同事負責的系統在 production 環境出現異常問題:原本系統已經運作了一段時間,某天突然出現 ORA-01000: maximum open cursors exceeded 造成相關功能無法運作,經過 IIS reset 後又可以正常使用,發生頻率不定,只是出現異常的間隔有日趨縮小的現象,造成問題的程式雖然已經找到也完成了修正,但隱含在背後的真正原因還是令我相當好奇,所以多花了不少時間來進行驗證及測試,過程中學到了許多東西一定要好好紀錄才行

2018-06-06

CentOS 7 Docker 無法連線 Docker daemon?!

同事想在 VirtualBox 上建立 CentOS 7 虛擬環境,並在 VM 中使用 Docker,在安裝 Docker 時一如往常相當順利直到實際建立 container 時卻遇到無法連線:Cannot connect to the Docker daemon at unix:///var/run/docker.sock 的提示訊息,重啟 Docker service 時也失敗並得到新的錯誤:Job for docker.service failed because the control process exited with error code.

解決這個問題的過程中學到以前不知道的內容與設定,順手紀錄一下備忘

2018-06-05

如何避免多個 EntityFramework 6 instance 造成資料覆蓋問題 (DB First - Oracle)

之前筆記 如何避免多個 EntityFramework 6 instance 造成資料覆蓋問題 (DB First - SQL Server) 提到 Entity Framework 使用上的限制,也紀錄如何透過在 SQL Server 的 table 上加入 rowversion 的欄位並將 Entity Framework 上該欄位的 Concurrency Mode 改為 fixed 就可以避免修改資料後遭其他人覆寫的狀況,那相同問題當然也會發生在 Oracle 上,就來看看 Oracle 該如何解決吧