原本有一支排程定期執行的 EXE ,提供用 Web 站台去手動啟動,原本 EXE 與 Web 站台是同一台電腦,這樣執行是沒有問題,但是 EXE 與 Web 站台改成不同台電腦執行上就有些問題,我又不想為了一個久久才發生的事情寫成24小時執行的監聽服務,所以這一次就決定使用MSMQ的Triggers來處理這一個問題。
[Log]使用NLog記錄Exception
NLog 是在.Net Framework 中最熱門的 Log 記錄工具之一,它不僅使用簡單,並且設定檔的設定項目也十分豐富。
基本上,它的Layout能滿足大多設定上的需求,但因為可設定項目太多,光是要輸出個可以方便抓蟲的完整 Exception 資訊,可能就要試了老半天,
所以本篇就針對Exception 的 Layout 用法加以介紹,方便大家設定。
[C#]簡單快速將各種數值字數轉成數字(string to int)
相信大家在寫程式的時候,一定有非常多的機會要將數值字數(numeric string)轉成 int 或 float型別的值,但數值字數可能不是很乾淨,有時還會有千分位、貨幣符號、前後有空白、甚至不是10進位,這樣轉換就有點累,像千分位或貨幣符號以前我是用 Replace 將 , $ 等符號刪除後再轉換,但如果你是使用.Net Framework 2.0 以上其實就不用那麼麻煩,內建就有功能幫你處理這些雜七雜八的東西,讓我們來看看怎麼做吧。
[EWS]使用 Exchange Web Services Managed API 輕鬆存取 Microsoft Exchange
說到存取Mail Server不外乎使用 SMTP、POP3、IMAP 這幾個協定,但除了 SMTP 協定 .Net Framework 中有提供外,POP3、IMAP 協定不是使用第三方組件就是自己用 Scoket 寫,那就有點累了,但如果你目前與未來只會連結 Microsoft Exchange Server 是可以考慮使用 Exchange Web Services Managed API,你會發現操作變簡單。
NHibernate+Sqlite測試實戰經驗分享
我們開發者有責任與義務寫測試來證明自己寫的東西沒有問題,但實際撰寫測試的時候,不會像教科書中的範例只有簡單的資料進出,測試資料的初始與還原,非常的麻煩,會讓人想放棄寫測試,後來因為NHibernate的彈性與Sqlite的輕量,把問題都簡化了,會讓人又重新愛上了測試,本分享會說明我當初遇到的問題,與後來NHibernate與Sqlite怎麼幫我決解這些問題。
NHibernate.Plus-1.0
NHibernate.Plus是小弟為了簡化NHibernate的一些操作而設計的Library。
Common.Logging.Elmah
這是前些日子寫的小元件,用來將Common.Logging與Elmah整合在一起,Common.Logging是記錄Log的介接元件,本身只有很陽春的ConsoleOut與Trace的記錄功能,但它強在可以與.Net中最常見的三套Logging元件整合,整合的元件有log4net、Enterprise Library Logging、 NLog,讓你在寫中間層元件時,如:DAO、Controls等等,只需要對Common.Logging提供的介面操作,等到使用中間層元件的專案在決定用三套的其中一套來記錄Log,增加元件的使用彈性,但很可惜的不支援Elmah,雖然可以讓Common.Logging+Nlog(或其他二套)與Elmah寫在同一個DB中,讓Elmah也可以呈現Common.Logging所寫入的Log,但是專案就會多參考一個dll,感覺很討厭,所以就花了一點時間寫了一個與Elmah介接元作。
用Razor語法寫範本-RazorEngine組件介紹
最近剛好有要寫寄Email的程式,在代碼中寫HTML覺得很呆,抽出代碼外寫到txt或html檔當範本,由程式執行時在載入檔案時用Regex換關鍵字又覺得不夠好用,而且因為有時會有要判斷一些條件,就會寫一堆if esle在代碼中看了就討厭,因為寫MVC久了,就很希望範本也可以像MVC中的View,傳Model過去,在View層決定如何呈現,而更希望是使用Razor語法來寫範本,花了時間研究,找到RazorEngine,使用它來載入檔案,由它來編譯與執行並輸入結果。
[C#]列舉切割器(IEnumerable Split)
有時會有將大量的資料做分割作業,如資料庫查尋出幾萬多筆,要以1000筆為一單位作業,相同的東西寫多了就想要簡化流程,所以就有了這個Extension。
[Unit Test]使用ContextMock以不連結資料庫的方式做單元測試
在Unit Test時最讓我煩惱的是測試時的測試資料,為了讓每一次測試是一致的受測資料,且不被外在環境干擾,有試過很多方法,如在開始測試時新增測試資料到資料庫,測試時只用這些資料,結束測試時刪除測試資料,或是先準備好內有測試資料的mdb每次測試時複制mdb,不斷的掛載與卸離mdb,說真的這些方法都很蠢,不好維護且各個測試又容易互相影嚮(本測試寫了一筆資料,可能影嚮了下一個測試的結果),寫到最後我就放棄寫需要連資料庫的任何Unit Test,直到前陣子看到有人使用Entity Framework然後使用Mock ObjectContext,決解了測試時需要使用到資料庫這個外部資源,讓Unit Test更Unit,我又開始在新的專案中寫Unit Test。
[ASP.NET MVC 3.0]JsonValueProviderFactory讓Action接收Json更輕鬆
我想在大量Ajax的網站中,一定時常以Json做為資料傳遞,但預設的情況下,Json的資料不會對應到參數,必需寫程式做額外的轉化,有點麻煩,而且也限制了參數的格式,但MVC 3增加JsonValueProviderFactory解決了這問題。
ASP.NET MVC 匯出Excel套件
寫這個套件的最初的理由是希望一行Code都不改,就可以將清單匯出成Excel,因為原本每一個匯出Excel的需求,都要額外寫一個Action去處理,非常的麻煩,而且大多數的Code都是雷同的,所以就想了個辦法做抽離,讓整個站台完全不用寫任何的額外Code(或是改一點點),再搭配這篇所寫Excel產生器,達到快速匯出的功能。
Excel產生器
因為客戶太多的匯出Excel的需求,每次都要寫一大串的Code去處理,越寫越多就覺得自己很笨,寫了一堆重覆Copy-Paste的Code,因此想了一個以Template的方式,不同的需求只要寫不同的Template,只要改一下Template就可以快速產生不同的Excel,Code變漂亮了,也大量減少了這類需求的工作量。
String轉成LambdaExpression(DynamicExpression)
有時一些簡單的流程控制,會把一些條件判斷寫在Database或config中,程式在執行時再剖析條件,來判斷流程是否可以進行,最早是自己寫剖析器然後反射取出值後在比對,因為自己功力有限,剖析的內容也有限,後來有嘗試使用CodeDOM,但使用上太麻煩,而且只為了短短的幾行,有殺雞用牛刀的感覺,後來.Net Framework3.5推出LambdaExpression後,這輕巧可以動態編譯產生Delegate,太適合用在這種情況,但是內建是沒有剖析器的,不過還好有現成的組件,可以輕鬆的將String轉成LambdaExpression。
Entity Framework批次Update與Delete v2
這是Entity Framework批次Update與Delete這一篇的改進版,程式碼重構與加強了Expression Tree的解析,常見的情況都有支援,改用ADO.NET內建的參數。
[WPF]使用Desktop Window Manager(DWM) APIs擴展視窗的邊框區域
前陣子在使用Microsoft Ribbon套件時,很簡單的就把自己的程式的樣式,用的像Windows Live Writer 2011一樣,而且一點也不覺得很突兀,那時就很好奇它是如何在視窗的標題列上加入控制項的,如果我不用Microsoft Ribbon我要怎麼樣做到同樣的效果,搜尋後找到原來是使用Desktop Window Manager(簡稱DWM) APIs,DWN APIs可以讓我們的程式使用Windows內建的框架,不用自己處理關閉或放大縮小等事件,可以在現有的機制上擴充按鈕或其他控制項,除了可以大幅增加設計的空間外,有時候把全域的控制選項放在邊框上,還可以大大的增加使用的便利性。
[C#]Core Audio APIs系列 (1) Core Audio APIs介紹
Core Audio APIs是在Windows Vista之後新增的API,主要是用來音效的處理,例如取得錄音與播放的裝置與資料與設定,聲音音量的控制與混音器,Stream的播放與錄制等等功能,在多媒體APIs中它是屬於比較低層的API,如果是要錄音或播放聲音,用這個API操作上會複雜些。
尋找AppDomain中所有組件中的衍生Type
因為希望某一個相關的程式寫好,不用做任何的設定就可以直接使用,這個需求我使用搜尋整個AppDomain下的Type,只要符合我自定的Interface或Base Class,就可以運作,這方法雖然有點取巧,但還滿好用的
為Console程式加上Icon
因為覺得Console程式在執行時,Titlebar與Taskbar上都出現預設的Icon有點醜,就研究一下怎麼設定,還滿簡單的。
讀取WCF傳送的MSMQ Message
因為工作中的專案有二台不同地點的主機,有資料同步的需求,而這個專案中我們是用WCF + MSMQ來處理資料交換,為了確保資料的完整性,有使用交易性的MSMQ,在WCF的預設機制下一個Message交易失敗十幾次後會把Message移到Poison的目錄下,可以知道有那一些Messqge處理失敗,但是用Windows的工具非常不易閱讀Message的內容,而且某些設定還會使得Message經過編碼,這時就很難看出Message的內容,本篇主要介紹如何用程式把Messge讀出並解碼。