为 ISAPI DLL 配置 Windows 7 IIS7

转自:http://chee-yang.blogspot.com/2009/10/configure-windows-7-iis7-for-isapi-dll.html

实际上按正文所说,在IIS8中还是不行。还是看评论中设置CGI模块方法吧。类似python网站发布。

Windows 7 IIS7 需要一些配置才能使 ISAPI DLL 正常工作。与 IIS 5 相比,它并不是那么简单。

安装 IIS 7

  1. 转到控制面板 | 程序和功能 | 打开或关闭 Windows 功能(需要特权模式)。
  2. 检查“Internet 信息服务”并确保“ISAPI 扩展”和“ISAPI 过滤器”也被选中。
  3. 单击确定按钮开始安装。

完成 IIS 7 安装后,打开您喜欢的 Web 浏览器并输入 URL http://localhost/以确保 IIS 正常运行。您可能需要检查防火墙设置并在必要时为端口 80 TCP 流量添加例外。

为 ISAPI DLL 配置

添加虚拟目录

首先,您可能需要添加一个虚拟目录来托管您的 ISAPI DLL:

  1. 打开 Internet 信息服务管理器(需要特权模式)
  2. 右键单击“默认网站”节点,然后单击弹出菜单的“添加虚拟目录”:

输入虚拟目录的“别名”和“物理路径”:

为虚拟目录启用 ISAPI

为虚拟目录启用 ISAPI:

  1. 选择虚拟目录节点(例如:本例中的“ISAPI”)。 
  2. 双击“处理程序映射”图标。 
  3. 单击“操作”面板中的“编辑功能权限...”
  4. 弹出“编辑功能权限”对话框
  5. 勾选“执行”。
  6. 单击确定按钮以提交更改。

为虚拟目录启用目录浏览

这是可选的,但很方便。要为虚拟目录启用目录浏览:

  1. 选择虚拟目录节点(例如:本例中的“ISAPI”)。 
  2. 双击“目录浏览”图标。
  3. 在“操作”面板中单击“启用”。

编辑匿名身份验证凭据

  1. 选择虚拟目录节点。
  2. 双击“身份验证”图标。
  3. 点击选择“匿名认证”项。
  4. 单击“操作”面板中的“编辑...”。
  5. 将弹出一个对话框。
  6. 选中“应用程序池标识”并按 OK 按钮提交更改。

启用 ISAPI 模块

  1. 单击根节点。
  2. 双击“ISAPI 和 CGI​​ 限制”图标。
  3. 单击“操作”面板中的“编辑功能设置...”。
  4. 选中“允许未指定的 ISAPI 模块”选项。此选项允许在 IIS 下执行任何 ISAPI dll。如果不使用此选项,则需要明确指定 ISAPI DLL 列表。

虚拟目录的编辑权限

  1. 选择虚拟目录节点(例如:本例中的“ISAPI”)。 
  2. 右键单击该节点,然后单击弹出菜单的“编辑权限”。
  3. 弹出一个属性对话框。
  4. 切换到“安全”页面
  5. 单击编辑按钮以显示权限对话框。
  6. 将“IIS_IUSRS”添加到权限列表中。

在 IIS 7 x64 上启用 32 位 ISAPI DLL

仅当您使用 IIS7 x64 并希望在 IIS 上运行 32 位 ISAPI DLL 时才需要这样做。如果您的 ISAPI DLL 和 IIS7 都是 x86 或都是 x64,您可以跳过此步骤。

  1. 单击“应用程序池”节点。
  2. 单击“DefaultAppPool”项
  3. 从“操作”面板中单击“高级设置...”。
  4. 弹出“高级设置”对话框
  5. 将“启用 32 位应用程序”设置为 True
  6. 单击确定按钮以提交更改

如果您没有为 32 位应用程序启用此选项,则在从 Web 浏览器执行 ISAPI 时可能会遇到以下错误:

HTTP 错误 500.0 - 内部服务器错误

由于发生内部服务器错误,无法显示该页面。

HTTP 错误 500.0 - 内部服务器错误
模块 IsapiModule
通知 ExecuteRequestHandler
处理程序 ISAPI-dll
错误代码 0x800700c1
请求的 URL    http://localhost:80/isapi/isapi.dll
物理路径 C:\isapi\isapi.dll
登录方法匿名
登录用户匿名 

您现在可以将您的 ISAPI DLL 部署到虚拟目录中并开始从 Web 浏览器执行该库。

DataSnap 和 ISAPI DLL

您可以创建 Delphi DataSnap ISAPP DLL 库并部署在 IIS 上。如果您使用了 ISAPI DLL,有时可能会在开发或部署期间遇到编译错误。这是因为调用的 ISAPI DLL 将缓存在应用程序池中。您不允许在缓存 ISAPI DLL 时覆盖它。

为了克服这个问题,您需要执行 Recycle 操作:

  1. 单击“应用程序池”节点。
  2. 右键单击“DefaultAppPool”项,然后单击“Recycle…”项。

在部署阶段鼓励部署为 ISAPI DLL,因为 IIS 将缓存 ISAPI DLL 以考虑性能。

但是,在开发阶段缓存可能不可行,因为需要在通过频繁编译或覆盖覆盖 ISAPI DLL 时执行回收。您可以考虑在开发时将服务器模块编译为 CGI 应用程序。CGI 的每次调用都是一个单独的操作系统进程,不会被 IIS 应用程序池缓存。

在 IIS 上安装 CGI

  1. 转到控制面板 | 程序和功能 | 打开或关闭 Windows 功能(需要特权模式)。
  2. 检查“Internet 信息服务”并确保选中“CGI”。
  3. 单击确定按钮开始安装。

启用 CGI 模块

  1. 单击根节点。
  2. 双击“ISAPI 和 CGI​​ 限制”图标。
  3. 单击“操作”面板中的“编辑功能设置...”。
  4. 选中“允许未指定的 CGI 模块”选项。

通过 URL 使用 DataSnap 服务器方法

DataSnap 服务器方法通过 REST 协议使用 JSON 作为数据流。例如,一个简单的 EchoString 服务器方法定义为:

type
  {$MethodInfo On}
  TMyServerMethod = class(TPersistent)
  public
    function EchoString(Value: string): string;
  结尾;
  {$MethodInfo 关闭}

执行

函数 TMyServerMethod.EchoString(Value: string): string;
开始
  结果:=值;
结尾;

要通过 URL 访问在 ISAPI DLL 中编译的此方法,URL 类似于

http://localhost/datasnap/MyISAPI.DLL/datasnap/rest/TMyServerMethod/EchoString/Hello

响应文本将是:

{“结果”:[“你好”]}

同样,CGI URL 是

http://localhost/datasnap/MyCGI.exe/datasnap/rest/TMyServerMethod/EchoString/Hello

 

参考:

  1. 带有 ISAPI dll 的 DataSnap 2010 HTTP 支持;作者:蒂尔尼,吉姆

34 条评论:

未知 说...

这很有帮助。谢谢。

晚上 8 点 20 分

塞斯宾莫伊说...

更改默认应用程序池不是 x64 上的最佳选择 => 与其他应用程序冲突。

最好创建一个新的应用程序池(32 位无 .net 框架)。并将池分配给新的虚拟目录。

在生产服务器 (iis7/7.5) 上要小心。您不需要在生产服务器上授权未知 isapi,在处理程序映射中,您可以“添加模块映射”并将您的 DLL 指定为 isapi 模块的参数。

上午 12 点 28 分

匿名人士说...

您好
我只是想知道您是否知道支持 Delphi ISAPI.DLL 的共享网络托管公司?
谢谢
山姆

早上 6 点 54 分

匿名人士说...

谢谢你的帮助。这是一篇非常好的博文,尤其是关于 32 位设置的部分。
干杯,特鲁茨

下午 5 点 25 分

亚历山大·卡尔达斯·马查多 说……

很好的方法,谢谢!唯一的评论是创建一个新的应用程序池并将其与您的 ISAPI 模块一起使用确实更好。
最好的问候

凌晨 2 点 46 分

匿名人士说...

伟大的文章!它对我有用 100%

凌晨 4 点 34 分

格伦 说...

谢谢!找到有关如何完成这项工作的信息就像一个奇迹。感谢您发布此信息!

凌晨 3 点 45 分

匿名人士说...

谢谢,这是一个很大的帮助,也是朝着正确方向迈出的一步,但我在连接数据库时仍然遇到问题。Isapi dll 似乎没有读取连接字符串所在的配置文件。

下午 4:05

周志扬 说...

也许您需要检查日志并找出它不起作用的原因。

晚上 9 点 21 分

哈门羊说……

你拯救了我的一天!
经过一天的搜索,我终于找到了这篇很棒的文章。这对我来说 100% 有效。

上午 12 点 10 分

匿名人士说...

很不错!!!

我浪费了很好的时间独自尝试这个。我对 II6 的配置经验还不够。

谢谢

醋酸乙酯

上午 7 点 53 分

匿名人士说...

谢谢,

这篇文章节省了很多工作时间。

醋酸

上午 7 点 56 分

保罗说...

你好,
非常感谢你的这篇文章。如果帮助我配置 ISS 7 以在几分钟内使用一些 Delphi Isapi dll。再次感谢你。

凌晨 4 点 49 分

蒂莫·博姆 说……

你好。我在 Win7 操作系统上有 IIS,想运行 ASP.Net 4.0 和 PHP5.3。ASP.Net 没有任何问题,并且没有任何问题且无需配置即可工作。PHP5.3 总是抛出错误:HTTP-Fehler 500.0 - Internal Server Error
C:\php5\php.exe - Der FastCGI-Prozess wurde unerwartet abgebrochen。也许有人有想法?

晚上 10:42

安东尼亚齐 说...

非常适合 Win7 64 位和 ISAPI dll。

Tks

下午 6 点 10 分

安东尼亚齐 说...

非常适合 Win7 64 位和 Delphi Dlls。

下午 6 点 10 分

迈克·罗兹洛格 说……

极好的工作!

迈克·罗兹洛格

下午 2:01

匿名人士说...

在挠了 4 个小时后,我偶然发现了这篇文章并解决了这个问题。

非常感谢并继续努力。

下午 6 点 32 分

匿名人士说...

谢谢!谢谢!谢谢!为什么微软自己的文档不能这么好?

在我浪费了很多时间关注其他来源之后,你救了我。32 位步骤对我来说特别重要。

最后,我的旧 C++ ISAPI .dll 在 IIS 中工作。

晚上 11:02

马塞洛 说...

谢谢你。这很有帮助。

早上 6:08

匿名人士说...

非常感谢!!!

优秀作品。

您还知道如何将 IIS 作为进程而不是作为服务运行吗?

[ ]s
杜兰

早上 7 点 17 分

周志扬 说...

我不知道如何配置 IIS7 以作为应用程序运行。您可以尝试在 http://serverfault.com/ 中询问

下午 6:00

西瓦 说...

感谢您的教程。我在 dephi 7 中开发了 ISAPI Web 应用程序。它在 windows xp 中运行良好,但在 windows 7 32 位上无法运行。我在 IIS7 中进行了与本文中提到的相同的设置。对于 windows xp 我做了组件特定虚拟目录身份帐户的服务已选择系统帐户。我在 windows 中找不到此设置。请帮助解决此问题。我正在等待回复。提前谢谢你

下午 3 点 15 分

周志扬 说...

Siva,您指的是哪些 Windows 设置?也许您需要仔细阅读并尝试从头开始重做所有内容。

上午 8 点 59 分

西瓦 说...

感谢您的快速回复。我尝试了很多次。我的 Delphi XE ISAPI dll 在 Windows XP 中运行良好。相同的应用程序没有在 Windows 7 32 位中运行。我做了与你提到的步骤相同的设置。在 Windows XP InetMgr虚拟目录选项卡应用程序保护是高(隔离)设置。我在 Windows 7 中找不到设置。我如何在 Windows 中设置此设置。请帮助解决此问题。提前感谢您。
感谢和问候
湿婆

上午 11:47

安迪说...

在您的帮助下,我终于启动并运行了我的 ISAPI。非常感谢!

上午 9 点 09 分

匿名人士说...

这不是纯粹的 Windows 7 特定的:在 Windows Server 2008 上,您可以遵循相同的操作(好吧,在该平台上是 IIS7/7.5 ;)

糟糕的是,我几天前已经自己弄清楚了(这会让我的任务容易得多)。

下午 4 点 24 分

路易斯·奥尔特加 说……

完美运行,但由于某些奇怪的原因,它无法在安全站点 (https/SSL) 下运行。同一个DLL!

凌晨 2 点 20 分

SathishKumar Sandupatla 说...

真的很棒...它帮助我将 ISAPI dll 放置在 Windows IIS7 中。

下午 6 点 19 分

匿名人士说...

谢谢,你为我节省了几个小时的抓挠时间

上午 8 点 34 分

匿名人士说...

谢谢你的帮助。
这是一篇很棒的博文,尤其是关于 32 位设置的部分。
干杯
埃内斯托。

上午 8 点 48 分

匿名人士说...

谢谢你的帮助。

早上 5 点 05 分

科斯敏说...

祝你长寿和繁荣:)

晚上 7 点 08 分

匿名人士说...

在我尝试执行保存在 c:\inetpub\webapplication1\webapplication1\default.aspx 中的 asp.net 代码时配置此代码后出现这样的错误......该怎么办?任何建议.. 我正在使用 Windows 7 Ultimate 32 位操作系统。

配置错误
描述:处理服务此请求所需的配置文件期间发生错误。请查看下面的具体错误详细信息并适当地修改您的配置文件。

解析器错误消息:使用注册为 allowDefinition='MachineToApplication' 的部分超出应用程序级别是错误的。此错误可能是由未在 IIS 中配置为应用程序的虚拟目录引起的。

晚上 11:19

发表评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值