Friday, August 10, 2007 - Posts

TIPS-Uncachable ASP.NET Page

遙想ASP時代,如果要避免ASP網頁被Cache住,每次瀏覽都要重新讀取,我們會用以下的寫法:

Response.Expires = -1

所以在ASPX中,我也用同樣的寫法來強制每次都重新執行。沒想到,網頁還是被Cache住了!
使用Fiddler檢查,發現就Header來看,網頁是過期了沒錯,不過回上一頁時,IE還是直接顯示Cache中的版本,沒有更新... orz

Google了一下,現在大家比較常用的做法是在Header中加入"no-cache",不過ASPX提供另一個簡便的函數:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

如此,Header的Cache-Control, Pragma, Expires一次設足,就可以確保網頁內容不被Cache住了。

PS: 經驗中,no-cache的招數在Modal Dialog中還是可能失效,建議URL上加亂數比較保險。

【茶包射手專欄】使用ProcMon五分鐘內破案的經典案例

Could not load file or assembly 'System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. Access is denied.

小組裡有台"鬧鬼"(註)的測試機器,老愛出些稀奇古怪的錯誤。今天執行某支ASPX時,發生以上錯誤...

一般人遇到這種狀況,除了重灌.NET Framework、重灌IIS、重灌Windows、去行天宮拜拜跟改行不寫程式之外,多半就只能束手無策。不過如果有Process Monitor在手,情況就不一樣了。

遇到Access Denied型的Error的,我的反射動作就是開啟Process Monitor;由於這個錯誤訊息很精確地指出無法存取的檔案是System.EnterpriseServices.dll,因此加個Path Contains "System.EnterpriseServices"的Filter,再瀏覽一次有問題的URL,立即就找到Access Denied的證據。

利用Jump To直接跳至GAC下的問題Folder,檢查一下權限,果然! 不知怎麼地,該目錄只剩下SYSTEM跟Administrators有權讀取,難怪用NETWORK SERVICE執行的w3wp.exe會吃閉門羹。參考其他類似目錄,補上權限,問題就消失了! 前後只花了不到五分鐘。

講到SystemInternals的這些好工具,306期iTHome的封面故事剛好就以它為主題,而兩位MVP(賴榮樞鄭子璉)與我也分享了自己的使用心得(咳... 還有照片哦,要簽名的人請帶週刊私下找我,目前沒有辦簽書會的計劃),有興趣的人可以去找來翻翻,。

====== 我是分隔線 ======

註: 所謂"鬧鬼"有兩種解釋: 一是指機器上常出現無法理解的怪現象,讓人直呼見"鬼"了;第二種是有程式麻瓜、電腦白目在搞"鬼",進行各種不可思議的系統修改與設定,任誰都猜不出問題會出在這種地方。

Search

Go

<August 2007>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678
 
RSS
【工商服務】


BlogLook Score and Rank

Syndication