pCloud Partner Program

.net WebBrowser的script error抑制

程式技術/.NET 2014/02/14 09:57
views: 461393 times
在 window form中使用 webbrowser 時, 有時會遇到 javscript error 的訊息, 此時會出現需要使用者介入的操作, 程式才能繼續執行下去.

這樣對於一些自動化操作的程式會有停止無法執行的問題, 所以可以利用一個 webbrowser 的屬性 "ScriptErrorsSuppressed" 設為 True 即可抑制這個會出現的人機介面.

不過記得使用這個屬性, 後續的程式也得注意網頁程式的異常後, 如何做良好的控制, 才不會因為這個屬性設定後, 雖然程式可以繼續往下執行, 但 webbrowser 中的程式錯誤而產生非預期結果的狀況, 就不好了.

參考資料: http://stackoverflow.com/questions/8009575/c-sharp-webbrowser-how-to-get-rid-of-javascript-error-prompt
top

LOG4NET的基本操作

程式技術/.NET 2013/03/13 15:48
views: 200185 times
這個 LOG4NET是用來做 .net 應用程式LOG使用的套件, 主要用來做除錯, 線上系統記錄, 稽查等應用時可以用來做記錄的套件, 是基於 Apache Project 下的專案, Open Source.

這裡做個簡單的基本介紹, 其實這套件功能十分強大, 可以只利用 config 檔就可以做得很多深層的設定, 並加以記錄, 而不用改到主程式. (當然, 前提是在主程式內必須要下對應的 log information 才行)

首先先到官方網站下載此專案, 這裡建議抓 compile 好的版本, 內含有說明文件:

http://logging.apache.org/log4net/download_log4net.cgi

這頁下的 log4net-1.2.11-bin-newkey.zip , 下載解開後, 裡面主要是 compile 好的 binary 檔, 找到 bin/net/[版本]/release 下的 log4net.dll 檔, 複製到自己的專案中, 就算初步完成了.

接下來就是在自己的專案裡加入參考 (reference), 並使用它的 namespace:

using log4net;

接下來就是設定 config file, 先列出下面 config xml內容:


其中的 section name = log4net 是用來說明會有一個 config section 是給 log4net 用的, 而下面的 log4net 才是真的 config 要寫的內容.

這裡只建了一個 logger, 名為 loginfo (名稱可以自訂), 然後 appender-ref 設為 InfoAppender 就是指向再下面的 appender , 這個 appender type 設為 RollingFileAppender 是用檔案來記錄用, 其他內容說明如下: (logger 也可以是 database 等其他的輸出裝置, 這裡以檔案為例)
File: 檔名
AppendToFile: 是否要寫到檔案
MaxFileSize: 單一 log 檔大小上限 (bytes)
MaxSizeRollBackups: 多少檔案一個循環, 當達到 MaxFileSize 時, 會自動附上 CurBackups 來檔案獨立出來, 並於達到這個數值時, 再重頭用(overwrite).
StaticLogFileName: 若設為 true, 則會以 File 名稱為 log檔名, false 則會以 [file].yyyy-mm-dd 的方式記錄
下面的 layout 則是用來設定 log 內容的欄位, %date 是日期時間, %thread 是執行緒, %level 是記錄層級, %logger 是 logger 名稱, %file %line 是原始程式檔名及行數, %message是 log的內容, %newline 就是換行了.

接下來就是在程式內呼叫的方式, 程式如下, 以 asp.net 為例:



在 page_load 時, 使用 Config.XmlConfigurator.Configure() 將 log4net 的 config 載入, 然後建立一個 ILog 的 interface, 利用 LogManager.GetLogger("logger name") 來取得 logger, 再來利用 .Info("message") 方法來將要記錄的 log 內容寫入 log 檔.

而除 Info 方法外, 還有 Debug, Error, Fatal, Warn 共計5個 log level.

最後以 asp.net 做的 log 內容如下:

2013-03-13 15:30:37,925 [4] INFO  loginfo - (d:\testlog4net\Default.aspx.cs:19) Page_Load - useragent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; MS-RTC LM 8; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
2013-03-13 15:37:42,721 [4] INFO  loginfo - (d:\testlog4net\Default.aspx.cs:19) Page_Load - useragent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; MS-RTC LM 8; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
2013-03-13 15:37:46,456 [4] INFO  loginfo - (d:\testlog4net\Default.aspx.cs:19) Page_Load - useragent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; MS-RTC LM 8; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
2013-03-13 15:37:46,800 [4] INFO  loginfo - (d:\testlog4net\Default.aspx.cs:19) Page_Load - useragent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; MS-RTC LM 8; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
2013-03-13 15:37:47,112 [4] INFO  loginfo - (d:\testlog4net\Default.aspx.cs:19) Page_Load - useragent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; MS-RTC LM 8; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
2013-03-13 15:37:47,393 [4] INFO  loginfo - (d:\testlog4net\Default.aspx.cs:19) Page_Load - useragent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; MS-RTC LM 8; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
2013-03-13 15:37:52,065 [4] INFO  loginfo - (d:\testlog4net\Default.aspx.cs:19) Page_Load - useragent:Mozilla/5.0 (Windows NT 5.2; rv:19.0) Gecko/20100101 Firefox/19.0


是不是很容易上手呢, 大家可以再試看看!

官方說明文件:
log4net SDK: https://logging.apache.org/log4net/release/sdk/
RollingFileAppender: https://logging.apache.org/log4net/release/sdk/log4net.Appender.RollingFileAppender.html
其他的 Appender: https://logging.apache.org/log4net/release/sdk/log4net.Appender.html

繼續閱讀:
http://biancheng.dnbcw.info/c/72275.html
http://blog.csdn.net/javc/article/details/4022677
top

C# Operator ??

程式技術/.NET 2011/05/20 12:50
views: 87938 times
今天看到這個 operator ?? , 雖然可以了解前後文他的功能, 不過還真是第一次看到.

於是查了一下, 在 msdn 上的說明:

http://msdn.microsoft.com/en-us/library/ms173224.aspx

這個運算子的應用情境如下:


若在取得變數時, 會有 null 的狀況, 又要給定預設值時, 可以利用上面程式碼, 不過是不是又臭又長呢? 可以利用這個運算子 ?? 來簡化, 如下:


當然, 和三元運算子的寫法同義, 只是上面的 ?? 更精簡一些:


相關閱讀:
http://demo.tc/Post/414
top
TAG ??, c#, operator

使用Regex.Replace中的MatchEvaluator

程式技術/.NET 2010/09/10 17:03
views: 409571 times
在 .net 中的 Regular Expression, 是使用這個 namespace: System.Text.RegularExpressions

其中若是要做比對樣式的內容取代, 可以使用 MatchEvaluator, 來進行將比對的內容進行處理再替代回去. 例如將 Server.UrlEncode 後的 %2f 改為 %2F, 而其他部分不要異動大小寫時, 就很實用.

程式碼如下:



其中 Server.UrlEncode 出來的結果為: http%3a%2f%2fwww.google.com , 而利用了 Regex.Replace 配合 MatchEvaluator 後, 就改為 http%3A%2F%2Fwww.google.com , 這樣只有改到 %xx 這種的大小寫, 而不會影響原來的大小寫.

其中的 MatchEvaluator 是一個 delegate 就是用來做每個比對到的內容再做加工的處理, 這裡用了類似 javascript 中的暱名函數處理, 把 MatchEvaluator 直接 inline 寫在裡面. 其中的 System.Text.RegularExpressions.Match 還有許多屬性可以, 例如 Index 可以取出是第幾個比對到的, 可以參考: http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.match_members.aspx

這樣一來是不是變得很容易處理字串, 另外也要注意有關的效率問題, 一定要顧及, 否則在大量文字比對後, 又利用了 MatchEvaluator 來進行處理, 若該函數效率不好, 會大打折扣的.

參考資料:
http://dotnetperls.com/regex-replace
top

.net中的日曆轉換

程式技術/.NET 2010/06/29 12:01
views: 184517 times
在 .net 中有個 System.Globalization 裡, 有許多國家的日曆可用, 像是民國年的轉換, 或是農曆年的轉換, 這個真的很有意思. 也免除了在程式中, 程式設計人員的轉換麻煩.

先來看看民國年的部分, 程式如下:


有趣的, 我想試看看早於 1911 年(也就是民國還未成立時, 會發生什麼事), 結果如下, 會發生一個 OutOfRangeException 如下圖:
用戶插入圖片
也就是必須是西元陽曆1912/1/1 00:00:00 ~ 9999/12/31 23:59:59 才行, 否則會有 Exception.

這樣當然很合理啦. 也避免一些錯誤輸入的狀況.

另外來看看農曆, (或稱陰曆, 月亮曆), 來試看看今天是農曆的日期:

今天是 2010/6/29, 秀出的結果是 5/18 相當正確, 十分方便. 不過似乎沒有反過來的查法, 但有正向查詢應該就很夠用了, 反向查再稍加手腳即可.

另外也可以取出天干(GetCelestialStem()), 地支(GetTerrestrialBranch())的功能. 還有日本曆(JapaneseCalendar), 很有意思.

參考資料:
http://dotnetmis91.blogspot.com/2010/06/dotnet-systemglobalization.html
http://anita-lo.blogspot.com/2008/03/net_20.html
這篇是日本曆的年號: http://blog.csdn.net/xue1234567890/archive/2009/10/24/4723056.aspx

top

Rewrite造成的403問題

程式技術/.NET 2010/03/10 20:06
views: 76133 times
之前介紹過這個軟體: ISAPIREWRITE http://diary.tw/tim/11

在 iis 下, 使用這個 isapirewrite 時, 要特別注意應用程式集區問題, 若是 rewrite 前後 application 使用不同的 app pool 時, 會發生 403 拒絕存取.

簡單地說, rewrite 的前後, 使用相同的 app pool 時, 這個問題就不會發生, 但有時為了增進效能及除錯應用, 或是獨立 web application, 切到不同的 app pool.

例如:

RewriteCond ^/test/([a-z0-9]+) /test/url.aspx?uid=$1 [I, CL, L]

都是在  /test 下的這個 app pool, 可以正常工作, 若是以下的 rewrite:

RewriteCond ^/test2/([a-z0-9]+) /test/url.aspx?uid=$1 [I, CL, L]

若是 /test2 和 /test 使用不同 app pool (應用程式集區) 時, 就會發生 403 的拒絕存取.

這是今天在除錯時發現的一個重大問題. 若有不明的 403 在 rewrite 上時, 可以往這個方向檢查看看!
top

利用ashx傳送檔案下載

程式技術/.NET 2009/12/14 17:32
views: 110786 times
在 asp.net 中, 若要實現檔案下載處理的方式(並且要進行 url 隱藏及下載管理), 可以利用 ashx (generic handler) 來進行, 方式很單純, 主要是在 header 上下一些手腳, 方式如下:



使用的方式若是處理檔案下載, 可以利用 application/octet-stream 這個 ContentType header , 並配合 Content-Disposition header 中, 利用 attachment; filename=xxxx 的方式來將檔案名稱指定給客戶端, 參考資料: http://support.microsoft.com/?scid=kb%3Ben-us%3B260519

而之後再利用 TransmitFile() 方法, 將在 server 上的檔案讀取出來並傳送到客戶端, 至於使用 TransmitFile 方法和其他方法的比較如這篇文章所示: http://blog.miniasp.com/post/2008/03/Caution-about-ASPNET-Response-a-Large-File.aspx

一般來說, 若是大檔案, 可以直接利用 TransmitFile 的方式來進行, 但不是太大型檔案, 有續傳需求時, 則不適用, 但效率上是以 TransmitFile 的效率最佳(因為不用先整個讀到記憶體中).

其他人的比較資料:
[ASP.NET] 無網址的檔案下載 - 進階研究 http://gogo1119.pixnet.net/blog/post/27407222

[2010/2/12 14:48]
相關文章: http://edu.uuu.com.tw/data_article/article/100212tips.htm

top

String.Substring的Exception

程式技術/.NET 2009/07/10 02:52
views: 80032 times
真是很常見的一個 exception, 就是利用 String.Substring 這個函數來取 Left, Mid, Right 的功能, 不過會有 exception 要自行避開的問題.

常常我們用 String.Substring(0, 5) 來當做 Left(string, 5) 的功能, 不過, 若是字串長度本身就短於 5 時, 就會發生一個 ArgumentOutOfRangeException 的 exception, 可以先參閱 msdn 的說明: http://msdn.microsoft.com/zh-tw/library/aka44szs(VS.80).aspx

當然, 我們可以容易地去避免這個問題, 利用字串長度和取出長度的比較較小的值為準, 如下寫法:


不過, 無論如何都很妙, 要來先做判斷的事, 但我們可以利用一個更簡單的方式(若不想要用判定法), 可以利用含入 Microsoft.VisualBasic 的 reference 來使用, 可以這樣寫:

strB = Microsoft.VisualBasic.Strings.Left(strA, 10);

其實就已經會處理掉那個 10 會造成參數錯誤的 exception, 而 Mid, Right 也都是一樣的作法, 當然啦, 還是可以利用原來的 String.Length 的判定方式來寫, 不過寫 c# 就是沒辦法有現成的功能, 要嘛自己寫, 要嘛就要比較一下有沒有參數超過的問題, 要嘛, 就是 Microsoft.VisualBasic.Strings 下的方法來用囉!
top

.net下enum列舉與string文字間的轉換

程式技術/.NET 2009/03/18 18:54
views: 70113 times
有時會用到這樣的功能, 就是列舉的名稱和列舉的值做轉換. 這個在 delphi 裡是利用 RTTI (Runtime Type Information)來達成, 在 .net 裡的作法也很單純, 利用 Enum 的 CLASS 方法(靜態方法)就可以做到了.

先來看看由 enum 轉回字串, 是使用 Enum.GetName 方法, 要傳入的是 enum 的 type 及該 enum object 即可, 程式碼如下:



再來是利用 string value 轉入 enum 的方法, 使用 Enum.Parse , 傳入一樣是 enum 的 type, 及傳入 string 的值, 最後有個參數是是否忽略區分大小寫的真值, 範例如下:


其中關於第一個部分, 使用 Enum.GetName 其實可以直接用 fruit1.ToString() 就拿到了, 不過根據這篇文章: http://www.cnblogs.com/smalldust/archive/2007/02/27/384657.html 提到了, 效率不太一樣, 就我個人覺得, ToString() 還是少用吧, 用 GetName 還是比較正規一點, 再加上效率有差的話, 其實還是用 GetName 好.

後面利用 string 轉入 enum 則要注意一下, 若發生找不到的狀況時, 將會有 exception 發生, 這個是需要注意的, 因為本來就有可能會發生這個問題, 要處理好這個部分的程式碼囉.

參考資料:
http://snipplr.com/view/3585/enum-to-string-and-string-to-enum/
http://www.cnblogs.com/smalldust/archive/2007/02/27/384657.html
top

微軟將於Visual Studio整合jQuery進來了!!

程式技術/.NET 2008/10/02 02:15
views: 126570 times
最近的消息, 微軟將於Visual Studio嵌入jQuery這組Open Source的函數庫了. 可以參考下面文章連結: 微軟Visual Studio將嵌入開放源碼jQuery程式庫

jQuery, 有在寫 Web application的工程師應該不陌生, 好用又洗鍊的語法, 方便容易使用的方式, 整個和 Web UI 可以做相當方便結合的一組 library 最近因為微軟的這個消息, 對於之前投資學習 jQuery 的 developer 們來說, 真是個不錯的好消息.

當然, 無論是否於 Visual Studio 內嵌入 jQuery, 大家也都可以直接於 web application 上使用這組 library 沒有什麼大問題, 不過相信對於整合度及方便性來說, 能夠和 Visual Studio 整合當然是再好不過了.

不過和原來的 AJAX 那組 framework 要怎麼整合, 如何取捨, 或是同時並存也是一個有趣的課題. (據消息來說應該是會改用 jQuery)相信這個消息對於已經同時正在使用 asp.net 開發及 jQuery library 的 developer 來說真是個好消息呢.

相關文章及連結:
google blog search: link
微軟將在 ASP.NET 相關產品中全面支援 jQuery
jQuery进入微软和Nokia的解决方案
微軟也搶著支援jQuery?
jQuery從此有名有分,我出運了!

top




Nextbit Robin 5.2吋六核心智慧型手機 Microsoft Office 365 中文家用版PKC (無光碟)
ASUS華碩 AC1900 雙頻無線路由器 RT-AC68U 美國 VORNADO 533 渦流空氣循環機 (黑色)
御茶園 每朝健康綠茶(650mlx24入) 每朝健康 雙纖綠茶(650mlx24入)


 Waiting...