Web services Delphi本机Web服务应用程序不工作。IIS 7似乎正在剥离路径信息

Web services Delphi本机Web服务应用程序不工作。IIS 7似乎正在剥离路径信息,web-services,delphi,iis,Web Services,Delphi,Iis,我遇到了一个有趣的问题,我从未在XP或IIS 6中遇到过 基本上,我无法让本机Delphi WebBroker Web服务服务器在64位Windows 7中与本机Web服务客户端一起工作 这是最基本的分类。如果我在Delphi 2010或任何版本中创建一个新的Web服务应用程序,返回Delphi 7,并使用IE 8访问它,我可以看到WSDLHTMLPublish组件创建的HTML,但我永远无法访问SOAP。同样,WSDL导入器也无法访问SOAP。我已将IIS 7配置为使用32位应用程序池,并已创

我遇到了一个有趣的问题,我从未在XP或IIS 6中遇到过

基本上,我无法让本机Delphi WebBroker Web服务服务器在64位Windows 7中与本机Web服务客户端一起工作

这是最基本的分类。如果我在Delphi 2010或任何版本中创建一个新的Web服务应用程序,返回Delphi 7,并使用IE 8访问它,我可以看到WSDLHTMLPublish组件创建的HTML,但我永远无法访问SOAP。同样,WSDL导入器也无法访问SOAP。我已将IIS 7配置为使用32位应用程序池,并已创建到处理程序映射的工作脚本映射。简而言之,32位ISAPI Web服务正在运行

例如,我有一个名为TestService的简单Web服务服务器,它是使用创建新Web服务服务器时生成的默认示例接口创建的

我将它安装在一个名为scripts的虚拟目录中

如果我输入,IIS 7将显示该页面

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

IIS7正在剥离pathinfo的其他证据是,如果我将鼠标停在ITestService链接上,状态栏会显示。单击该链接会将我带到另一个HTML页面,该页面与。但是,任何包含脚本名称后面的pathinfo的链接都会让我直接访问

我在Delphi7、Delphi 2010和Delphi XE中对此进行了测试,得到了相同的结果

我猜IIS7正在剥离pathinfo,因为即使是WSDL导入器也无法访问SOAP定义

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

你知道发生了什么事吗


补充:Bob Swart报告说他在Windows 7 32位下没有遇到任何问题。下载32位操作系统并将在新VM中尝试。

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

我真正需要做的是简单地启用ISAPI dll模块映射处理程序映射的执行特性权限。如果您已经创建了未指定的ISAPI模块或CGI模块,则此模块映射可用于虚拟目录

为了解决我的问题,我需要

删除我弄乱了其处理映射的目录

由于我已经允许未指定的ISAPI模块从服务器的IIS部分的ISAPI和CGI限制小程序中选择编辑功能设置,因此我需要为相应的网站添加一个新的虚拟目录。在这里,我重新创建了在上一步1中删除的目录

从虚拟目录的处理映射小程序中,您可能禁用了ISAPI dll处理映射。选择它,然后选择右侧的“编辑要素权限”选项。启用“执行”复选框

不要编辑ISAPI dll处理映射并添加可执行文件。尽管这个对话框说可执行文件是可选的,但一旦添加了一个,就结束了。你永远无法移除它,我永远无法移除它。在我的一次VM安装中,我在此对话框中有一个可执行项。为了摆脱它,我不得不卸载IIS 7,然后重新安装它。也许这是不必要的,但我不知道如何在不输入可执行项的情况下删除和重新安装模块映射

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


我希望我的痛苦帮助了别人。

我知道这个问题有点老了,但这个答案可能会帮助有同样问题的人

在IIS管理器中添加脚本映射时,会在web.config中创建如下处理程序:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers accessPolicy="Read, Execute, Script">
            <add name="MyISAPI" path="myisapi" verb="*" modules="IsapiModule" scriptProcessor="C:\MyISAPI\myisapi_extension.dll" resourceType="Unspecified" requireAccess="Execute" preCondition="bitness32" />
        </handlers>
    </system.webServer>
</configuration>
您需要做的是将属性allowPathInfo=true添加到处理程序中。IIS管理器没有此选项,您必须手动编辑web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers accessPolicy="Read, Execute, Script">
            <add name="MyISAPI" path="myisapi" verb="*" modules="IsapiModule" scriptProcessor="C:\MyISAPI\myisapi_extension.dll" resourceType="Unspecified" requireAccess="Execute" preCondition="bitness32" allowPathInfo="true" />
        </handlers>
    </system.webServer>
</configuration>

通过这种方式,您可以在本例中选择ISAPI扩展的请求路径:,否则,如果不进行此更改,您将需要使用DLL的名称调用ISAPI扩展

FWIW Win7 64bit+IIS7+Delphi 2010 Pro,一个非常基本的web broker应用程序在这里工作正常。可以查看所有http变量,包括pathinfo。我对IIS所做的唯一事情就是添加32位应用程序池、添加脚本映射处理程序、添加ISAPI和CGI限制。作品
使用虚拟目录和虚拟站点。这个特定的应用程序不是SOAP应用程序,但我确实在不久前制作了一个示例SOAP应用程序。没什么帮助,我意识到,对不起!您是否碰巧在IIS7中安装了URLEWRITE模块并激活了一些URLEWRITE规则?不必在站点文件夹中,也可以在父文件夹中。在文件夹结构中继承配置设置时,请检查web配置文件。。。