2011-08-11 29 views
9

我想弄清楚IIS7.5中處理程序映射的含義以及IIS如何使用此信息來決定誰執行什麼操作。瞭解IIS7.5上的處理程序映射

例如我看到幾個條目的* .aspx路徑。哪一個勝利?是否有些條目僅適用於經典流水線啓用時以及其他一些情況下使用集成流水線?位(32位,64位)影響哪些條目被考慮?

如果有人可以解釋(或有鏈接解釋)什麼是IIS7.5(在「調度」/「路由」/「你!照顧!」)時,當一個普通的HTTP請求來臨時:

GET /blabla/dummy.bla HTTP/1.1 
    Host: blabla.org 

後來我會對IIS重寫模塊或ARR是如何工作感興趣,但現在我只對Handle Mapping配置感興趣。

提前致謝!

回答

10

Fallow's answer說法並不準確,處理程序映射IIS7從IIS6腳本映射不同的處理

在IIS7的管理控制檯中,UI中沒有顯示重要屬性preCondition屬性。

preCondition屬性用於指定何時應調用處理函數。回答你的問題:

例如,我看到幾個條目的* .aspx路徑。哪一個 獲勝?是否有些條目僅適用於經典流水線 已啓用,而其他一些條件適用於集成流水線?並且位數(32位,64位)影響哪些條目被考慮?

不同的前提條件用於決定應該調用哪個處理程序.aspx。例如,在安裝了ASP.NET 2.0和ASP.NET 4.0的64位系統上,定義了六種可能的.aspx處理程序映射。每個人都有不同的規則preCondition

<add name="PageHandlerFactory-ISAPI-4.0_32bit" 
    path="*.aspx" 
    modules="IsapiModule" 
    scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" 
    preCondition="classicMode,runtimeVersionv4.0,bitness32" /> 

<add name="PageHandlerFactory-ISAPI-4.0_64bit" 
    path="*.aspx" 
    modules="IsapiModule" 
    scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" 
    preCondition="classicMode,runtimeVersionv4.0,bitness64" /> 

<add name="PageHandlerFactory-Integrated-4.0" 
    path="*.aspx" 
    type="System.Web.UI.PageHandlerFactory" 
    preCondition="integratedMode,runtimeVersionv4.0" /> 

<add name="PageHandlerFactory-Integrated" 
    path="*.aspx" 
    type="System.Web.UI.PageHandlerFactory" 
    preCondition="integratedMode" /> 

<add name="PageHandlerFactory-ISAPI-2.0" 
    path="*.aspx" 
    modules="IsapiModule" 
    scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" 
    preCondition="classicMode,runtimeVersionv2.0,bitness32" /> 

<add name="PageHandlerFactory-ISAPI-2.0-64" 
    path="*.aspx" 
    modules="IsapiModule" 
    scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" 
    preCondition="classicMode,runtimeVersionv2.0,bitness64" /> 

如果你看一下每個preConditions上面他們都略有不同,這是IIS如何選擇執行哪個處理程序映射。

欲瞭解更多信息,請參閱:

http://www.iis.net/ConfigReference/system.webServer/handlers/add

也有一個偉大的文章,其解釋處理程序映射,並在這裏他們preConditions

Achtung! IIS7 Preconditions

+0

非常感謝。完成閱讀最後一篇文章。你知道「\ *」之間有什麼區別嗎?和處理程序的路徑參數中的「\ *」?我猜路徑參數的工作方式就像是一個文件夾中的dir路徑,當文件的請求類似於GET \ f1 \ f2.f3 \ f4 \ abc時,文件的名稱是「abc」,arg1.arg2.arg3 = 3.1&arg4.txt。如果是這種情況,那麼我不會想象GET語句如何匹配「*。」。像GET \文件夾\頁面。?a = 1&b = 2 – Eduard

+0

@eduard - 你可以問一個單獨的問題嗎? – Kev

+0

Ups。抱歉。 [新問題](http://stackoverflow.com/questions/7039680/meaning-of-path-attribute-on-handlers-in-web-config) – Eduard

0

以下文章屬於IIS 6.0,但我沒有發現IIS 7.5中的行爲不同的證據。

IIS檢查ScriptMaps中是否存在任何通配符應用程序映射,如果是,則從ScriptMaps屬性調用ORDER中的第一個通配符應用程序映射。

僅當通配符應用程序映射返回並告知IIS「我不處理該請求」時,IIS纔會調用下一個通配符應用程序映射......直到IIS經歷所有通配符應用程序映射或某些通配符應用程序映射聲明「I 「」難道處理此請求

的鏈接帖子是: http://blogs.msdn.com/b/david.wang/archive/2005/10/14/howto-iis-6-request-processing-basics-part-1.aspx

+0

鏈接石頭!謝謝。 – Eduard

+0

無論如何,我根本不相信,我看到太多匹配* .aspx的條目如果對於每個請求,它需要測試4個不同的模塊......作爲一個附註,你知道哪些URL *。路徑匹配? (它被稱爲ExtensionLessURL ...) – Eduard