HttpModules/HttpHandlers in IIS7

剛才發現,把網站專案移到Vista/IIS7執行時,原本web.config設定的httpHandlers失效:
<httpHandlers>
    ....
    <add verb="GET" path="DownloadFile.axd" type="Afa.Ajax.WebControl.DownloadHandler" />
</httpHandlers>

連線/DownloadFile.axd時,會傳回HTTP 404找不到檔案的錯誤。

透過IIS7的Internet Information Services (IIS) Manager / Handler Mappings設定UI,重新指定這個HttpHandler,功能就恢復了。但修好的原因是web.config被IIS Manager改過,再一比對,發現IIS Manager在web.config中加入了這一段:
<system.webServer>
  <handlers>
    ....

    <add name="DownloadFile" path="DownloadFile.axd" verb="*" type="Afa.Ajax.WebControl.DownloadHandler" resourceType="Unspecified" preCondition="integratedMode" />
  </handlers>
</system.webServer>

如果要兼顧IIS6及IIS7,可在web.config中同時保留httpHandlers(for IIS6)及handlers(for IIS7)裡的相同定義,但記得要加上<validation validateIntegratedModeConfiguration="false" />,不然IIS7會因為定義重覆出現而發生錯誤。參考資料

歡迎推文分享:
Published 15 September 2008 08:41 AM 由 Jeffrey
Filed under: , ,
Views: 30,507



意見

# Rex said on 15 March, 2009 10:48 PM

請問如果我的是寫成dll的 webservice為什麼照您這樣做還是不能運作??

# Rex said on 16 March, 2009 12:38 AM

您好,我是依照www.codeproject.com/.../wsinaclasslibrary.aspx%E5%B0%87webservice%E7%B7%A8%E8%AD%AF%E6%88%90dll, IIS6沒問題, 然後在IIS7依照您的方式設定, 還是無法運作, 請問我該怎麼修改才對?

# Rex said on 16 March, 2009 12:49 AM

sorry,  www.codeproject.com/.../wsinaclasslibrary.aspx

# Ark said on 16 March, 2009 08:05 PM

to Rex

msdn.microsoft.com/.../46c5ddfy.aspx

2.0 ? 3.5 好像不用這樣麻煩吧

而且APP有分class的和default

雖然不太清楚但是3.5是用這樣的方式<remove verb="*" path="*.asmx"/>

<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

# Rex said on 17 March, 2009 06:22 AM

Hi 黑暗大您好,

我用3.5 IIS7.

我試了依舊不能運作, 能否麻煩您試著用上述方式將web service編譯成dll測試看看...

或是若您將web service編譯成dll, IIS7要怎麼在handlers讓<add path="ppppp"> path可以設定??

感謝您抽空幫忙...謝謝!!

# Jeffrey said on 17 March, 2009 09:22 AM

to Rex, 我試了一下是成功的,在<system.webServer><handlers>裡加入這一列:

<add name="WSTest" verb="*" path="WSTest.asmx" preCondition="integratedMode" type="WSLibrary.WSTest" />應該就行了。

(記得移掉validate屬性)

# Ark said on 17 March, 2009 10:31 AM

初步判定~有梗

比照Rex的提供範例 new 的專案名稱WebService1

用 W7 的IIS 7 下

<system.webServer>

<validation validateIntegratedModeConfiguration="false"/>

<modules>

<remove name="ScriptModule"/>

<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

</modules>

<handlers>

<remove name="WebServiceHandlerFactory-Integrated"/>

<remove name="ScriptHandlerFactory"/>

<remove name="ScriptHandlerFactoryAppServices"/>

<remove name="ScriptResource"/>

<add name="asmytest" path="*.asmy" verb="*" type="WebService1.WSTest" />

<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

</handlers>

</system.webServer>

照這樣*.asmy 可以跑

但是在vs 2008 debug 時卻不行

debug的狀態要變成設在httpHandlers內

<httpHandlers>

<remove verb="*" path="*.asmx"/>

<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add path="WSTest.asmy" verb="*" type="WebService1.WSTest" validate="false"/>

<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>

</httpHandlers>

發佈也不好發佈~要另外複製出去

搞這麼花俏做啥?

# lester said on 31 March, 2009 02:55 AM

黑暗大您好,

想跟您請教一個問題,我將一個IIS6搬移至IIS7後,要去開啟一個在maintenance虛擬目錄下的aspx page(實際路徑為D:\inetpub\wwwroot\AP\Ares\Maintenance\ecs0001.aspx),但卻得到404的錯誤訊息,如下:

==================================

找不到資源。

描述: HTTP 404. 您要尋找的資源 (或其相依性的其中之一) 可能已經移除、名稱已經變更或是暫時無法使用。請檢閱下列 URL,並且確定它的拼寫無誤。

要求的 URL: /AP/Ares/Maintenance/ecs0001.aspx

==================================

但是該aspx page是確定存在的,因此利用process monitor去追蹤,發現他會去create D:\inetpub\wwwroot\AP\Ares\Maintenance\ecs0001.aspx\web.config,然後因為該路徑不存在,所以會有path not found錯誤。

不知道是不是這原因造成404的錯誤,如果是的話,為什麼會去create那個web.config檔呢?再麻煩黑暗大幫忙解答,謝謝!

# Jeffrey said on 31 March, 2009 09:35 AM

to lester, 你的OS灌在D:或者inetpub是手工裝移的呢? 是否只有ASPX出錯,HTML OK?

我在噗浪開了一條討論串,你看可否再多提供一些線索。http://www.plurk.com/m/p/m03ij

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<September 2008>
SunMonTueWedThuFriSat
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication