關於我

我的相片
用心思考、保持熱情,把工作上的經驗作分享與紀錄。希望能夠跟大家一起不斷的成長~

如何Precompile Asp.Net程式

今天再測試使用CAT.Net檢測自己寫的Web專案的資安漏洞時,

因為WebApplication所Compiler出的dll只有Web專案的dll與自己寫的class libary。

因此Cat.Net再做檢測的時候,只會檢測到這些程式碼!

 

但如果有些程式是寫在aspx上的呢?!

所以有先將整個Web專案PreCompile的想法。

希望可以檢測到所有的程式。

 

這邊寫一下我基本使用的cmd語法,如下:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_compiler.exe -v / C:\Precomplier

/:指的是虛擬目錄,我這邊用/,表示要Precompile的為此機器的預設網站!

C:\Precomplier:指的是要輸出的路徑!

 

大致如上!

找到IIS App對應Process ID

找到IIS App對應的Process ID

IIS6.0版本,可使用iisapp.vbs找到,如下圖:

擷取

IIS7.0以上版本,則更新為appcmd.exe,如下圖:

擷取1

以上方式則可找出對應IIS App 的Process ID

資料庫實體檔案,成長大小設定錯誤,造成之系統瓶頸排除

遇到一個系統上的問題,將此次請教公司資深同事,一起將問題排除的整個過程做簡單記錄!

發生問題

於2010/04/17 20:00左右,系統某轉檔程式,會一直在同一個Query上發生資料庫TimeOut的問題,

但當我將此Query拿至SSMS執行,卻又相當正常(已執行ClearBuffer)。

 

問題排除整體分兩階段

[Log查詢,Performance Counter記錄,問題初步判斷]

  1. 先看到最初發生系統錯誤Log於2010/04/17 20:00,錯誤訊息為對XXX資料表的Query發生TimeOut。
  2. 接著查看各系統Log(專案系統Log、EventLog、SqlServerLog),而於Sql Server Log中,也於同上時間點,開始發生如下訊息。SQL Server has encountered 86 occurrence(s) of I/O requests taking longer than 15 seconds to complete on file [E:\XXX\XXX.MDF] in database [XXX] (5).因此初步方向是有發生磁碟效能上瓶頸。
  3. 於是先記錄Performance Counter 確認系統Avg. Disk Queue的平均值約停留於37上下,確實比建議值<2高過許多!
  4. 接著試著找出造成Disk瓶頸的原因,接著錄下系統SqlServer相關Counter,發現記憶體已完全被使用完,且Counter數據也與建議值差異甚大.因此初步判斷是記憶體不足,所照成磁碟不斷寫入,進而有磁碟上的瓶頸。

[資料庫設定,問題排除]

  1. 接著往DB設定上查詢。
  2. 同事發現資料庫存放XXX資料表的實體檔,當實體檔不足時,每次居然使用預設值每次只擴充成長1MB的大小。(此XXX資料表目前已成長到約35G的大小,因當初規劃就知道此資料檔相當龐大,又讀寫頻繁,所以當初有刻意將此資料表規劃獨立在一個資料庫實體檔中,因此此35G大小的實體檔,其實只存放了一個此XXX資料表)
  3. 同事認為以上設定大有問題,有可能會造成不斷在重新配置大小,也就有可能造成磁碟上的讀寫頻繁!因此先將此設定改為一次成長100MB。
  4. 最後在無意間再次查詢Performance Counter時,發現磁碟效能瓶頸問題完全解除!系統程式也不再發生TimeOut! 再比對回覆正常的時間,與設定一次成長100MB的時間點發現相吻合。
  5. 以此確認為預設1MB的設定,造成了磁碟I/O上不斷需要被重新配置。

以上排除問題方式我想有一定的方向可循,雖其中也還有許多疑點可循值得探討,可覺得還是一個不錯的錯誤排除記錄,可供往後繼續參考!

Asp.net Response output file 中文編碼問題整理

輸出檔案的程式Encoding需注意:

  1. 輸出Encoding設定可分兩部分,Header部份與Content部份。
  2. 每個部份的Encoding均必須先設定,再寫入資料避免資料沒被設定到。 Ex:須先設定Response.HeaderEncoding,在Response.AddHeader(),否則設定會失效。
  3. 檔名如需使用中文,因檔名是寫在Header中,因此要設定Header為相對應Encoding。
  4. 檔案內容部份,則要將對應Encoding,設定於Content中。
  Response.ContentType = "application/vnd.ms-excel"; 

  //HeaderEncoding的設定,需將網站部署於IIS上,才可正確使用 
  //於ASP.NET Developermnet Server上測試會失效,可能是此環境沒正確處理HeaderEncoding! 
  //此處在寫入Header與Content資料前,便先早一步將Encoding設定完成,確保Encoding生效! 
  Response.HeaderEncoding = System.Text.Encoding.GetEncoding("utf-8"); 
  Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); 
  Response.AddHeader("content-disposition", "attachment;filename=我是中文(堃)XXX.xls"); 

  //因Content此處設定使用Utf-8格式,但Excel開啟時,可能會使用錯誤的編碼方式, 
  //因此特別在Content中,加入一行meta,用於讓Excel使用指定的編碼方式開啟! 
  Response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8 />"); 
  Response.Write("<body><div>我是中文(中),我是難字(堃)</div></body>");      
Response.End();
上方會發現,Header的編碼,用的是big5 原因是各家瀏覽器讀取Header時,可用的編碼方式各不相同 各家瀏覽器讀取Header之編碼方式整理如下:
  • [  IE   ] 預設使用不支援中文的編碼方式讀取,中文則只支援使用big5
  • [FireFox] 預設使用utf-8讀取,中文同時支援big5與utf-8
  • [ Google] 預設使用utf-8讀取,中文只支援使用utf-8讀取

因此如需使用中文檔名,因FireFox與Google預設都是使用utf-8
因此不需特別指定Header的Encoding即可正確顯示。
但IE因預設使用不支援中文的編碼,因此有中文檔名需求只能強制指定為唯一支援的big5格式!
但指定為big5格式,則將照成難字依然無法顯示,與Goole不認得big5,所以也會無法正常顯示的問題。
(2010/06/15 測試 Google 瀏覽器 Chrome 也可以正確讀取Big5編碼中文字了!!!)

何為CTP, RC, RTM, RTW?

本文參考出處

何為CTP, RC, RTM, RTW

我們常看到CTP, RC, RTM, RTW這些版本名詞,但這些究竟是什麼意思呢?

CTP這還是實驗室的玩具,先丟到論壇上看看大家的反應,再給我們一點改進方向!

Beta我們依舊在實驗,你可以拿它來開發一些東西,但我們不保證會出什麼問題。

RC就是它了,雖然我們沒什麼把握,但我們已經迫不及待想跟你分享,但我還不確定有什麼問題我沒想到的。

RTM沒問題,你可以用它了。

RTW歡迎你上網下載它來用。

GDR絕對沒問題(有問題我們會在下一代改進XD)。