2011-03-16 51 views
6

我有一個網站使用ISAPI Rewrite以及一個自定義HttpModule,這兩個Url重定向和重寫。IIS7 HttpModule和ISAPI篩選器執行順序

在IIS 6中,一切工作正常:ISAPI重寫過濾器將首先運行,其次是HttpModule。在IIS 7(集成模式)中,順序現在是相反的,這是一個問題。

我的問題,特別是,HttpModule有一個條件,它將使用context.RewritePath發出Url重寫。如果沒有提供文檔,它將顯式地將「index.aspx」添加到路徑中,因此請求/test/被重寫爲/test/index.aspx

在重寫路徑後的某一時刻,ISAPI重寫篩選器將執行。我們有一個與模塊相反的規則:對/test/index.aspx的請求獲得301-重定向到/test/。因此,我們有一個無限循環。

在IIS 7中如何確定HttpModules和ISAPI過濾器的執行順序?訂單可以更改嗎?我發現this question,但它並沒有真正的幫助。我不是IIS 7的主人,但我確實在一定程度上理解模塊和ISAPI過濾器「一起」運行。不幸的是,他們仍然以不同的方式進行管理,我無法弄清楚如何迫使他們先於另一個人跑。幫幫我!

注意:假設我無法更改現有的代碼。它在IIS 6中工作。我只是想知道是否有辦法使它在IIS 7集成模式下工作。

回答

0

看看下面的文章,它解釋了IIS 7 pipeline。管道的順序不能改變。不知道這是否是一個選項,但您可以用IIS URL Rewrite module替代ISAPI Rewrite。這可能允許您的應用程序在集成管道模式下運行,否則,您可能需要將應用程序池切換爲以經典模式運行。

2

我也有,我認爲ISAPI重寫會首先執行一個類似的問題,但顯然這不是事情如何與IIS7

工作,我發現這個線程,指出

在集成模式原生模塊,isapi和.net的事件被稱爲混合在一起

eg如果它是BeginRequest,那麼本地模塊是第一個來的,然後是isapi,然後是.net代碼。之後,所有事情都會重複進行AuthenticateRequest ...

前一段時間它曾經是這樣的:isapi已經處理了所有事件,只有在那個.net被調用之後。這可能是你所想的。

http://www.helicontech.com/forum/18447-ISAPI_RW3_Lite_on_IIS_7x_Integrated_mode.html

希望這有助於