星期五, 12月 16, 2005

[.Net]關於 ASP.NET 的 Cache(後續追蹤報導)

昨天在 Trace ASP.NET Caching 之後,還是念念不忘...
這麼好用的 OutputCacheModule 為甚麼會需要特別設定才會掛載??

於是今天再次 Trace, 這次從 Page 的產生開始.
於是我下手查了 Mono 的 PageCompiler 與 PageParser
他們之間的 Class diagram 大致是這樣
PageParser-20051216

在收到 Page Request 的時候,如果以前沒編譯過,Page Compiler 會先 Parse 這個 Page, 接著組出 code, 動態編譯成組件 (Assembly),然後再載入這個組件.
這樣一查下來,發現 PageParser 遇到 @ OutputCache 這個 Directive 的時候,也沒有動態去載入 OutputCacheModule 這個 Module.

這更怪了,再搜索 HttpModuleCollection.AddModule (.Net 是 HttpModuleCollection.LoadModule ),發現這真的只有在 HttpApplication 一開始的時候才有用到.
難道我昨天的結論真的沒有錯??

在萬念俱灰之下,利用 Google 搜索 OutputCacheModule
找到這篇文章:Extending the ASP.NET Runtime with Custom HTTP Modules

才發現,除了應用程式自訂的 web.config 之外,其實還有預設的 .config !!
以 .Net 1.1 來說,他是在 %WINDIR%\Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config
Mono 來說,他是在 /etc/mono/1.0/machine.config

打開來看之後,赫然發現在這裡, OutputCacheModule 已經被載入了!
所以並不需要特別在你自己的 web.config 去加載 OutputCacheModule!!

p.s. 這篇是意外的收穫,對於整個流程解析的不錯,僅供參考:ASP.NET 中 Session 實現原理淺析 (1) 會話的建立流程

沒有留言: