雖然 IIS 7 網頁伺服器核心內建的請求處理管線讓原生程式碼開發者能以 C++ 撰寫 HTTP 模組,但原生程式碼與管理程式碼開發者可用的事件通知並不完全相同。 開發者若將 HTTP 模組從受管語言(如 C#)遷移到原生程式碼,則在建立新模組時必須處理這些差異。
全球通知
有了 IIS 7,開發者現在可以創建原生程式碼的 HTTP 模組,在全域層級處理通知。 在先前版本的 IIS 中,開發者可以建立只在請求層級處理通知的 HTTP 模組。 處理全域通知的 HTTP 模組用於處理各種伺服器層級事件的通知。
下表列出了可供原生程式碼開發者的全域通知方法。
| 事件通知方法 | 說明 |
|---|---|
| OnGlobalApplicationResolveModules | 當 IIS 解析已註冊模組時會呼叫。 |
| OnGlobalApplicationStart | 當 IIS 啟動應用程式時被調用。 |
| OnGlobalApplicationStop | 當 IIS 退出應用程式時呼叫。 |
| OnGlobalCacheCleanup | 當 IIS 清除快取時呼叫。 |
| OnGlobalCacheOperation | 當 IIS 執行快取相關操作時呼叫。 |
| OnGlobalConfigurationChange | 當設定檔有變更時會被呼叫。 |
| OnGlobalCustomNotification | 當模組提出使用者自訂通知時呼叫。 |
| OnGlobalFileChange | 當網站內的檔案被更改時會被呼叫。 |
| OnGlobalHealthCheck | 當執行與健康相關的手術時會被呼叫。 |
| OnGlobalPreBeginRequest | 在請求進入整合請求處理管線前呼叫。 |
| OnGlobalRSCAQuery | 當執行 Run-Time 狀態與控制查詢時呼叫。 |
| 全域停止監聽 | 當 IIS 停止接受新申請時,我會打電話過去。 |
| OnGlobalThreadCleanup | 當 IIS 將執行緒回傳到執行緒池時呼叫。 |
| OnGlobalTraceEvent | 當追蹤事件被觸發時會被呼叫。 |
比較請求通知訊息
雖然原生程式碼與管理碼 HTTP 模組的請求通知方法在許多方面相似,但兩者並非完全相同。 例如,原生程式碼與受管理程式碼模組的確定性請求通知方法清單幾乎相同,但非確定性請求通知方法的清單卻有很大差異。
原生代碼確定性請求通知
下表列出了原生程式碼開發者可用的確定性請求通知方法。
| 事件通知方法 | 事件後通知方式 |
|---|---|
| OnBeginRequest | OnPostBeginRequest |
| OnAuthenticateRequest(身份驗證請求事件) | OnPostAuthenticateRequest |
| 授權請求 | OnPost授權請求 |
| OnResolveRequestCache | OnPostResolveRequestCache |
| OnMapRequestHandler | OnPostMapRequestHandler |
| OnAcquireRequestState | OnPostAcquireRequestState |
| OnPreExecuteRequestHandler | OnPostPreExecuteRequestHandler |
| OnExecuteRequestHandler | OnPostExecuteRequestHandler |
| OnReleaseRequestState | OnPostReleaseRequestState |
| OnUpdateRequestCache | OnPost更新請求快取 |
| OnLogRequest | OnPostLogRequest |
| OnEndRequest | OnPostEndRequest |
Managed-Code 確定性請求通知
下表列出了可供管理程式碼開發者使用的確定性請求通知方法。
| 事件通知方法 | 事件後通知方式 |
|---|---|
| 開始請求 | (無) |
| 認證請求 | 後驗證請求 |
| 授權請求 | 後授權請求 |
| 解決請求快取 | PostResolveRequestCache |
| MapRequestHandler | PostMapRequestHandler |
| AcquireRequestState | 取得請求後狀態 |
| PreRequestHandlerExecute | (無) |
| 請求處理程式執行 | PostRequestHandlerExecute |
| ReleaseRequestState | 發布請求後狀態 |
| 更新請求快取 | 請求更新快取 |
| 記錄請求 | PostLog請求 |
| 結束請求 | (無) |
Native-Code 非確定性請求通知
下表列出了可供原生程式碼開發者使用的非確定性請求通知方法。
| 事件通知方法 | 事件後通知方式 |
|---|---|
| 同步完成 | (無) |
| OnCustomRequestNotification | (無) |
| OnMapPath | (無) |
| OnReadEntity | (無) |
| OnSendResponse | (無) |
Managed-Code 非確定性請求通知
下表列出可供管理程式碼開發者使用的非確定性請求通知方法。
| 事件通知方法 | 事件後通知方式 |
|---|---|
| PreSendRequestHeaders | (無) |
| PreSendRequestContent | (無) |