剛才發現,把網站專案移到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會因為定義重覆出現而發生錯誤。參考資料


Comments

# by Rex

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

# by Rex

您好,我是依照http://www.codeproject.com/KB/aspnet/wsinaclasslibrary.aspx將webservice編譯成dll, IIS6沒問題, 然後在IIS7依照您的方式設定, 還是無法運作, 請問我該怎麼修改才對?

# by Rex

sorry, http://www.codeproject.com/KB/aspnet/wsinaclasslibrary.aspx

# by Ark

to Rex http://msdn.microsoft.com/en-us/library/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"/>

# by Rex

Hi 黑暗大您好, 我用3.5 IIS7. 我試了依舊不能運作, 能否麻煩您試著用上述方式將web service編譯成dll測試看看... 或是若您將web service編譯成dll, IIS7要怎麼在handlers讓<add path="ppppp"> path可以設定?? 感謝您抽空幫忙...謝謝!!

# by Jeffrey

to Rex, 我試了一下是成功的,在<system.webServer><handlers>裡加入這一列: <add name="WSTest" verb="*" path="WSTest.asmx" preCondition="integratedMode" type="WSLibrary.WSTest" />應該就行了。 (記得移掉validate屬性)

# by Ark

初步判定~有梗 比照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> 發佈也不好發佈~要另外複製出去 搞這麼花俏做啥?

# by lester

黑暗大您好, 想跟您請教一個問題,我將一個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檔呢?再麻煩黑暗大幫忙解答,謝謝!

# by Jeffrey

to lester, 你的OS灌在D:或者inetpub是手工裝移的呢? 是否只有ASPX出錯,HTML OK? 我在噗浪開了一條討論串,你看可否再多提供一些線索。http://www.plurk.com/m/p/m03ij

Post a comment