Iis-7

IIS 7 中是否有可能剝離我的 HTTP 請求的 pathinfo 部分的設置?

  • February 8, 2015

我遇到了一個在 XP 或 IIS 6 中從未遇到過的有趣問題。

基本上,我無法讓本機 Delphi (WebBroker) Web 服務伺服器與 Windows 7 64 位中的本機 Web 服務客戶端一起工作。

這是最基本的細分。如果我在 Delphi 2010(或任何版本,回到 Delphi 7)中創建一個新的 Web 服務應用程序,並使用 IE 8 訪問它,我可以看到 WSDLHTMLPublish 組件創建的 HTML,但我永遠無法訪問 SOAP。同樣,WSDL Importer 也無法訪問 SOAP。(我已將 IIS 7 配置為使用 32 位應用程序池,並且我已創建到處理程序映射的工作腳本映射。簡而言之,32 位 ISAPI Web 服務正在執行)。

例如,我有一個名為 TestService 的簡單 Web 服務伺服器(使用創建新 Web 服務伺服器時生成的預設範例界面創建)。

我將它安裝在一個名為腳本的虛擬目錄中。

如果我在地址欄中輸入服務的 URL,IIS 7 會顯示相應的頁面。

如果我將滑鼠放在 ITestService 的 WSDL 連結上,我會在狀態欄中看到 pathinfo 部分。但是,當我點擊此連結時,地址欄會顯示帶有路徑資訊的完整 URL,但我只看到來自服務的 HTML(沒有路徑資訊的 URL)。似乎沒有辦法得到 SOAP 定義。IIS 7 似乎忽略了腳本名稱之後的所有內容(它忽略了路徑資訊)。

IIS7 正在剝離路徑資訊的其他證據是,如果我將滑鼠懸停在 ITestService 連結上,狀態欄會顯示帶有查詢字元串(無路徑資訊)的服務 URL。點擊該連結會將我帶到另一個 HTML 頁面,該頁面與服務和查詢字元串相關聯。但是,任何在腳本名稱後麵包含路徑資訊的連結都會將我帶到基本 URL(無路徑資訊)。

我在 Delphi 7、Delphi 2010 和 Delphi XE 中對此進行了測試,結果相同(都在 Windows 7 Ultimate 64 位上。

我猜測 IIS7 正在剝離路徑資訊,因為即使 WSDL 導入器也無法訪問 SOAP 定義。我用 Chrome 得到了同樣的結果。換句話說,它似乎不是瀏覽器問題。

這是 IIS7 配置問題嗎?

問題是我在 ISAPI dll 的處理映射中創建了一個特定的腳本映射。這導致 IIS 將所有請求重定向到特定的 dll,這就是任何包含資訊路徑部分的請求都被忽略的原因。資訊路徑被剝離。

我真正需要做的是簡單地啟用 ISAPI-dll 模組映射處理程序映射的執行功能權限。一旦您允許未指定的 ISAPI 模組(或 CGI 模組,如果那是您創建的那種 Web 伺服器擴展),此模組映射可用於虛擬目錄。

為了解決我的問題,我需要

  1. 刪除我弄亂了處理映射的目錄。
  2. 由於我已經允許未指定的 ISAPI 模組(從伺服器的 IIS 部分的 ISAPI 和 CGI​​ 限制小程序中選擇編輯功能設置),然後我需要為適當的網站添加一個新的虛擬目錄(這裡是我重新創建我在上一步 1 中刪除的目錄。
  3. 從虛擬目錄的處理映射小程序中,您可能禁用了 ISAPI-dll 處理映射。選擇它並選擇右側的編輯功能權限選項。啟用執行複選框。

不要編輯 ISAPI-dll 處理映射並添加執行檔。即使這個對話框說 Executable 是可選的,一旦你添加了一個,它就結束了。你永遠無法刪除它(我永遠無法刪除它)。在我的一個虛擬機安裝中,我在此對話框中有一個可執行條目。為了擺脫它,我不得不解除安裝 IIS 7,然後重新安裝它。(也許這不是必需的,但我不知道如何在不輸入可執行條目的情況下刪除和重新安裝模組映射)。

此外,如果您的 ISAPI DLL 是 32 位 DLL,並且您在 64 位作業系統中工作,則需要為關聯的應用程序池啟用 32 位應用程序。

我希望我的痛苦對某人有所幫助。

引用自:https://serverfault.com/questions/185361