2013-03-07 79 views
0

什麼是使ISAPI DLL工作在IIS7中以進行查詢所需的最小步驟www.website.com/test/bin/ISAPIGet.dll?a=b?請不要參考頂級谷歌搜索,他們是非常通用的,不工作。 我在Delphi2010中編寫了非常簡單的ISAPIGet.dll,它在IIS5 Win2000中很好用。然後我將它放在IIS7 SBS2008, 中,放到C:\ inetpub \ wwwroot \ website \ test \ bin文件夾中。 創建網站/網頁, 用於/測試應用, VirtualDirectory的/ bin中, 中的HandlerMappings的/ bin中添加腳本映射的* .dll我ISAPIGet.dll, 允許我在ISAPIandCgiRestrictions DLL, 創建32位ApplicationPool非託管代碼,經典模式, 將其綁定到/ test應用程序。 當quering www.website.com/test/bin/ISAPIGet.dll?a=b我得到各種錯誤,如500,503(當AppPool失敗),而主頁www.website.com工作正常。 我該怎麼辦?我需要配置web.config文件,在哪裏以及如何?如何在IIS7 64bit中配置Delphi 2010 ISAPI.dll?

+0

你的服務器日誌說的錯誤是什麼? – jachguate 2013-03-07 02:12:58

+0

你應該捕獲崩潰轉儲和分析,http://support.microsoft.com/kb/2580960 – 2013-03-07 03:42:15

+0

我不同意這個問題太模棱兩可。 Web上的99/100分步教程未能將關鍵步驟添加到IIS7的32位ISAPI DLL。經歷了兩年前與OP一樣的挫折感,他的問題對我來說非常合適。 – 2013-03-07 19:36:38

回答

5

據我所知,我有類似的問題讓我們的ISAPI DLL在WinSvr2008R2(64b)上的IIS7中運行。我寫下了一些快速筆記,以幫助我重複最終實現它的步驟。我會盡力在這裏提供這些(至少我們做了什麼)。

  1. 授予「讀&執行,列出文件夾內容,和讀取」權限的IUSR到文件夾C:\PathToISAPI_DLL
  2. 複製的ISAPI DLL需要運行到c:\windows\syswow64文件夾(例如,MIDAS.DLL所有DLL文件,dbxmss.dll等)
  3. 啓動IIS管理器
  4. 添加應用程序池「MyAppPool」 [不管理的,經典的,從現在開始]更改的新應用程序池
  5. 「高級設置」,讓32位,加上設置空閒超時時間
  6. 使用「MyAppPool」應用程序「MyApp的」添加到您的網站,並設置物理路徑C:\PathToISAPI_DLL

現在,你需要做的幾個步驟,在DOS提示符下完成配置的東西:

cd /d c:\windows\system32\inetsrv 

REM *** Grant rights to execute the DLL *** 
appcmd.exe set config -section:isapiCgiRestriction /+[path='C:\PathToISAPI_DLL\ISAPI.dll',allowed='true'] 

REM *** Grant the url of the Execute access for hander mappings *** 
appcmd.exe set config "Default Web Site/MyApp/ISAPI.DLL" "/commit:Default Web Site/MyApp" /section:handlers /accessPolicy:Read,Script,Execute 

REM *** Make sure you have an ISAPI module mapping for *.dll at that path *** 
appcmd.exe list config "Default Web Site/MyApp" /section:handlers | findstr /i *.dll 

這就是我的筆記的範圍。我已經成功地跟蹤了他們幾次,並一直工作。我有從來沒有能夠使用只是GUI工作。我有總是不得不在DOS提示符下運行appcmd命令來完成配置。

有時我仍然看到一個404錯誤,在這種情況下,我從帶有ISAPI.DLL的文件夾中刪除web.config,並再次運行最後兩條appcmd命令。當然,我的ISAPI DLL在web.config文件中沒有任何其他設置,因此刪除它並不會造成什麼影響......

1

是不是因爲dll是32位而IIS7是64位進程,所以不能讀取一個Delphi 32位DLL?

您的主頁是由IIS處理的沒有問題的靜態html。

但是當IIS嘗試加載ISAPIGet.dll時,它會失敗,因爲它不是64位庫,或者它的某個依賴項缺失。

  • 您是否確定您在32位模式下使用IIS7應用程序池?
  • 你有所有需要的子庫和bpl在相同的路徑或c:\ windows \ syswow64嗎?