クエリ www.website.com/test/bin/ISAPIGet.dll?a=b に対して IIS7 で ISAPI dll を動作させるために必要な最小限の手順は何ですか? 上位の Google 検索を参照しないでください。それらは非常に一般的であり、機能しません。IIS5 Win2000 でうまく動作する非常に単純な ISAPIGet.dll を Delphi2010 で作成しました。次に、IIS7 SBS2008 の C:\inetpub\wwwroot\website\test\bin フォルダーに配置します。/website 用の Web サイト、/test 用のアプリケーション、/bin 用の VirtualDirectory を作成し、/bin 用の HandlerMappings 内にスクリプト マップ *.dll を ISAPIGet.dll に追加し、ISAPIandCgiRestrictions で dll を許可し、32 ビット ApplicationPool NonManaged コードを作成し、クラシック モードでバインドしました/test アプリケーションへ。www.website.com/test/bin/ISAPIGet.dll?a=b をクエリすると、500、503 (AppPool が失敗した場合) などのあらゆる種類のエラーが発生しますが、ホームページ www.website.com は正常に動作しています。他に何をすべきですか?どこで、どのように web.config ファイルを構成する必要がありますか?
2 に答える
思い出したように、ISAPI DLL を WinSvr2008R2(64b) の IIS7 で実行するには、同様の問題がありました。最終的に機能するようになった手順を繰り返すのに役立つ簡単なメモを書き留めました。ここでそれらを提供しようとします (少なくとも私たちが行ったこと)。
- IUSR への「読み取りと実行、フォルダーの内容の一覧表示、および読み取り」権限をフォルダーに付与します。
C:\PathToISAPI_DLL
- ISAPI DLL を実行するために必要なすべての DLL ファイル
c:\windows\syswow64
(例: midas.dll、dbxmss.dll など) をフォルダーにコピーします。 - IIS マネージャーを起動する
- アプリ プール「MyAppPool」を追加します [マネージドなし、クラシック、今すぐ開始]
- 新しいアプリケーション プールの「詳細設定」を変更して 32 ビットを許可し、アイドル タイムアウトを設定します。
- 「MyAppPool」を使用してアプリケーション「MyApp」を Web サイトに追加し、物理パスを
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だけを使用して機能させることはできませんでした。構成を完了するには、常にappcmd
DOS プロンプトでコマンドを実行する必要がありました。
それでも 404 エラーが表示されることがあります。その場合は、ISAPI.DLL を含むフォルダーから web.config を削除し、最後の 2 つのappcmd
コマンドを再度実行します。もちろん、私の ISAPI DLL には web.config ファイルに他の設定がないため、削除しても問題ありません...
dll が 32 ビットであり、IIS7 が 64 ビット プロセスであるため、Delphi 32 ビット dll を読み取ることができないという理由だけではありませんか?
メイン ページは、IIS によって問題なく処理される静的な html です。
しかし、IIS が を読み込もうとするとISAPIGet.dll
、64 ビット ライブラリではないか、依存関係の 1 つが見つからないために失敗します。
- IIS7 アプリケーション プールを 32 ビット モードで使用してもよろしいですか?
- 必要なすべてのサブライブラリと bpl が同じパスまたは c:\windows\syswow64 にありますか?