一開始,當然從HttpModule開始,就是類ForumsHttpModule
(不能忽略ForumConfiguration.cs這個熱門檔案,裡面的代碼比較簡單,就不說了)
-->Init()函數,其中掛鈎事件到application上,再定義了兩個timer定時器,每15分鐘一次
-->根據application事件的先後順序,首先是Application_BeginRequest()
-->其中調用了RewriteUrl()函數
-->再調用Globals.GetSiteUrls();(中間過渡)
-->再調用SiteUrls:SiteUrls();讀取SiteUrls.config檔案,即URL的變換規則
-->返回後,才開始真正的重寫工作,代碼全在ReWrittenUrl.cs檔案
熟悉的人其實一看SiteUrls.config就知道怎樣操作了,因為沒有像dottext那樣太類化,只是命名有點亂
~~~~~~~~~~~~~不過不要忽略這一小段代碼
ForumContext frmContext = CreateForumContext(context);
frmContext.CurrentUrl = context.Request.RawUrl.ToString();
// 2005/04/07
//safe to set url rewrite data;
if(isReWritten && newPath != null)
{
frmContext.IsUrlReWritten = true;
}
還有就是web.config裡的<pages validateRequest="false" autoEventWireup="true" pageBaseType="AspNetForums.Components.ForumPage, AspNetForums.Components" />
其中類ForumPage擴充自page類,實現為改寫action屬性為變更後的url,這是asp.net自添加的屬性,用於自post
~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->接下看還有一個重要的函數是CaptureForumPingback()
其實現RSS訂閱,注意不是文章的訂閱,而是每個版塊右上方的RSS訂閱
-->其中ForumsDataProvider dp = ForumsDataProvider.Instance();返回的其實是SqlDataProvider類
下面那句dp.RssPingback(pingbackList);調用儲存過程forums_Forum_RssPingback_Update更新表forums_ForumPingback記錄
這裡的功能似乎只是更新RSS訂閱的次數就了事了
-------------------------------------------------
按時間順序,接著是Application_AuthenticateRequest()
-->其中判斷驗證方式,如為passport/negotiate可見下載包附帶的“Itelite Passport使用說明”
-->最後,無論哪種驗證模式,都在roles.GetUserRoles()裡context.User = new GenericPrincipal(context.User.Identity, roleArray );
-------------------------------------------------
接著是Application_AuthorizeRequest(),跟蹤匿名使用者(這部分沒有細看,單從兩三個函數還搞不清來龍去脈),並判斷使用者有否訪問頁面的許可權,沒有轉向登出頁面
-------------------------------------------------
接著,在離開HttpModule之前,再回過頭來看兩個定時器實現的功能
-->emailTimer掛載ScheduledWorkCallbackEmailInterval(),實現 郵件發送/匿名線上更新
-->Emails.SendQueuedEmails( (HttpContext) sender);
將郵件暫存於資料庫,然後用定時器實現郵件群發,是一種常用技術。這裡把類MailMessage派生一個新類EmailTemplate,實現記錄發送失敗次數的做法,值得借鑒;還有一點就是用fields屬性實現SMTP伺服器的使用者驗證
-->statsTimer掛載ScheduledWorkCallbackStatsInterval(),實現 索引和統計資訊
-->其中Search.IndexPosts( (HttpContext) sender, 100);
ANF的類比全文檢索搜尋就從這裡出發,其過程原理hidotnet已有詳細論述,實現為每過15分鐘對最新的100個貼子進行索引更新