使 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 文件夹中。为 /website 创建网站,为 /test 创建网站,为 /bin 创建 VirtualDirectory,在 /bin 的 HandlerMappings 中为我的 ISAPIGet.dll 添加脚本映射 *.dll,在 ISAPIandCgiRestrictions 中允许我的 dll,创建 32 位 ApplicationPool 非托管代码,经典模式,绑定到 /test 应用程序。在查询 www.website.com/test/bin/ISAPIGet.dll?a=b 时,我遇到各种错误,例如 500、503(当 AppPool 失败时),而主页 www.website.com 工作正常。我还应该做什么?我是否需要配置 web.config 文件,在哪里以及如何配置?
问问题
3998 次
2 回答
5
我记得,让我们的 ISAPI DLL 在 WinSvr2008R2(64b) 上的 IIS7 中运行时,我遇到了类似的问题。我写下了一些快速笔记,以帮助我重复最终让它工作的步骤。我会尝试在这里提供这些(至少我们做了什么)。
- 授予 IUSR 对文件夹的“读取和执行、列出文件夹内容和读取”权限
C:\PathToISAPI_DLL
- 将 ISAPI DLL 需要运行的所有 DLL 文件复制到
c:\windows\syswow64
文件夹中(例如 midas.dll、dbxmss.dll 等) - 启动 IIS 管理器
- 添加应用程序池“MyAppPool”[无托管,经典,立即开始]
- 更改新应用程序池的“高级设置”以允许 32 位,并设置空闲超时
- 使用“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 来让它工作。我总是不得不appcmd
在 DOS 提示符下运行命令来完成配置。
有时我仍然会看到 404 错误,在这种情况下,我会从包含 ISAPI.DLL 的文件夹中删除 web.config,然后appcmd
再次运行最后两个命令。当然,我的 ISAPI DLL 在 web.config 文件中没有任何其他设置,所以删除它并没有什么坏处……
于 2013-03-07T06:19:55.960 回答
1
不只是因为 dll 是 32 位,而 IIS7 是 64 位进程,所以无法读取 Delphi 32 位 dll?
您的主页是由 IIS 处理的静态 html,没有问题。
但是当 IIS 尝试加载时ISAPIGet.dll
,它会失败,因为它不是 64 位库,或者它的依赖项之一丢失。
- 您确定在 32 位模式下使用 IIS7 应用程序池吗?
- 您是否在同一路径或 c:\windows\syswow64 中拥有所有需要的子库和 bpl?
于 2013-03-07T06:47:01.177 回答