我有一個應用程序實現爲ISAPI篩選器,其行爲需要更改,取決於它是由ISA或IIS加載。在GetFilterVersion期間,如果通過ISA加載,則需要註冊SF_NOTIFY_SEND_RAW_DATA;如果通過IIS加載,則需要註冊SF_NOTIFY_SEND_RESPONSE。ISAPI篩選器如何區分由IIS或ISA加載?
似乎沒有關於傳遞給GetFilterVersion的服務器的任何信息。是否有一些技巧可以識別和區分IIS和ISA?
[編輯]
應用程序需要知道服務器加載它在初始化時,在GetFilterVersion通話過程中。沒有當前請求,因此嘗試從頭變量獲取SERVER_VARIABLE將不起作用;此時沒有標題變量。
爲了詳細說明,我的應用程序設置了響應頭,比如cookie和緩存控制頭。在ISA服務器環境中運行時,它必須使用SF_NOTIFY_SEND_RAW_DATA事件來完成此操作,修改ISA代理髮送的原始數據。但是,在IIS中,使用此通知會帶來嚴重的性能損失,因此應用程序應使用SF_NOTIFY_SEND_RESPONSE。 SF_NOTIFY_SEND_RESPONSE不適用於ISA,因爲此事件不會因代理響應而被觸發,僅適用於源自ISA本身的響應,如錯誤頁面。最後,註冊事件在GetFilterVersion()期間發生一次,並且一旦加載過濾器就不能被修改。
因此,應用程序需要知道,在初始化期間,當它決定註冊SF_NOTIFY_SEND_RESPONSE或SF_NOTIFY_SEND_RAW_DATA時,無論它是由IIS還是ISA加載。
謝謝!這是我認爲可能存在的那種事情,但是沒有記住足夠的Windows API或對IIS/ISA足夠了解。 – veefu 2010-02-24 14:18:30