簡體   English   中英

了解 IIS7.5 上的處理程序映射

[英]Understanding Handler mapping on IIS7.5

我試圖弄清楚 IIS7.5 中處理程序映射的含義以及 IIS 如何使用這些信息來決定誰執行什么。

例如,我看到幾個帶有 *.aspx 路徑的條目。 哪一個贏了? 會不會是某些條目僅在啟用經典管道時才適用,而其他條目僅在使用集成管道時適用? 位數(32 位、64 位)會影響考慮哪些條目?

如果有人可以解釋(或有解釋的鏈接)IIS7.5 在通用 HTTP 請求到來時做了什么(在“調度”/“路由”/“你:照顧那個!”):

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

稍后我會對 IIS 重寫模塊或 ARR 的工作原理感興趣,但現在我只對句柄映射配置感興趣。

預先感謝!

Fallow 的回答不太准確,處理程序映射 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選擇執行哪個處理程序映射的方式。

有關更多信息,請參閱:

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

還有一篇很棒的文章在這里解釋了處理程序映射及其preConditions

阿赫頓! IIS7 前提條件

上述解決方案對我不起作用,我嘗試了以下步驟並且它有效:在 IIS 管理器中打開 ISAPI 過濾器模塊並從列表中刪除 aspnet_isapi.dll。 aspnet_isapi.dll 是 ISAPI 擴展而不是 ISAPI 過濾器。

更多信息請參見: http://forums.iis.net/t/1107699.aspx?HTTP+error+500+0+error+code+0x800700b7

以下帖子與 IIS 6.0 有關,但我沒有發現任何證據表明 IIS 7.X 中的行為有所不同。

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

只有當通配符應用程序映射返回並告訴 IIS“我沒有處理此請求”時,IIS 才會調用下一個通配符應用程序映射......直到 IIS 聲明“通配符應用程序映射處理此請求” “。”

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM