我遇到了一个有趣的问题,我从未在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服务服务器时生成的默认示例接口创建)。

我将其安装在名为scripts的虚拟目录中。

如果输入http://localhost/scripts/TestService.dll/wsdl,则IIS 7将显示页面http://localhost/scripts/TestService.dll

如果将鼠标放在ITestService的WSDL链接上,则会在状态栏中看到http://localhost/scripts/TestService.dll/wsdl/ITestService。但是,当我单击此链接时,地址栏显示http://localhost/scripts/TestService.dll/wsdl/ITestService,但是我只能看到http://localhost/scripts/TestService.dll中的HTML。似乎没有办法获得SOAP定义。 IIS 7似乎忽略了脚本名称之后的所有内容(它忽略了pathinfo)。

IIS7剥夺pathinfo的其他证据是,如果我将鼠标悬停在ITestService链接上,状态栏将显示http://localhost/scripts/TestService.dll?intf=ITestService。单击该链接会将我带到另一个HTML页面,该页面与http://localhost/scripts/TestService.dll?intf=ITestService关联。但是,任何在脚本名称后包含pathinfo的链接都将我带到http://localhost/scripts/TestService.dll

我已经在Delphi 7,Delphi 2010和Delphi XE中对此进行了测试,结果相同。

我猜想IIS7正在剥离pathinfo,因为即使WSDL Importer也无法获得SOAP定义。

尝试使用CGI选项创建新的Web服务,并得到相同的结果。

有什么想法吗?

补充:鲍勃·斯瓦特(Bob Swart)报告说他在32位Windows 7下没有问题。下载32位操作系统,然后尝试(在新VM中)。

最佳答案

问题是我已经在ISAPI dll的处理映射中创建了特定的脚本映射。这导致IIS将所有请求重定向到特定的dll,这就是为什么忽略包含信息路径部分的任何请求的原因。信息路径被剥离。

我真正需要做的就是简单地启用ISAPI-dll模块映射处理程序映射的“执行”功能许可。一旦允许未指定的ISAPI模块(或CGI模块,如果这是您创建的Web服务器扩展),则此模块映射可用于虚拟目录。

要解决我的问题,我需要


删除我弄乱了其处理映射的目录。
由于我已经允许使用未指定的ISAPI模块(从服务器的IIS部分中的“ ISAPI和CGI限制”小程序中选择“编辑功能设置”),因此我需要为适当的网站添加一个新的虚拟目录(在这里我重新创建了该目录)我在先前步骤1中删除的目录。
从虚拟目录的“处理映射”小程序中,可能已禁用ISAPI-dll处理映射。选择它,然后选择右侧的“编辑功能权限”选项。启用执行复选框。


不要编辑ISAPI-dll处理映射并添加可执行文件。即使此对话框说可执行文件是可选的,但一旦添加了它,它就结束了。您永远无法删除它(我永远无法删除它)。在我的一个VM安装中,此对话框上有一个Executable条目。为了摆脱它,我必须卸载IIS 7,然后重新安装它。 (也许这不是必需的,但我无法弄清楚如何在不输入Executable条目的情况下删除并重新安装模块映射)。

此外,如果ISAPI DLL是32位DLL,并且您正在使用64位操作系统,则需要为关联的应用程序池启用32位应用程序。

我希望我的痛苦可以帮助某人。

10-06 04:55