用IIS7在Delphi CGI上看不到WSDL

时间:2009-10-20 09:52:11

标签: delphi iis soap iis-7 cgi

我创建了一个非常简单的Delphi 2010 CGI Web服务,并且能够在Delphi 2007上得到完全相同的问题。

我的可调用界面如下所示:

ISimpleTest = interface(IInvokable)
['{4E318A9A-D361-4A18-A963-EE6D7F70E9C5}']
  function SayHello(const S: string; N: Integer): string; stdcall;
end;

该功能以类似的简单方式实现:

function TSimpleTest.SayHello(const S: string; N: Integer): string;
begin
  Result := 'Hello ' + S + ', all ' + IntToStr(N) + ' of you';
end;

我将生成的SimplecGI.exe复制到运行IIS7的Windows Server 2008服务器上。我创建了我的虚拟文件夹,配置了执行权限,允许未指定的CGI模块,启用了32位应用程序,然后终于能够使用类似这样的URL从浏览器中查看服务信息页面:http://myserver:8001/SimpleCGI/SimpleCGI.exe

配置步骤与IIS6不同,但两个IIS版本的服务信息页面看起来完全相同。它还具有ISimpleTest的WSDL链接,就像在IIS6上一样。但是在IIS6上,单击此链接(这样的URL:http://myserver/SimpleCGI/SimpleCGI.exe/wsdl/ISimpleTest)会在浏览器中显示预期的WSDL。但是在IIS7中,单击此链接只会再次显示服务信息页面。 IWSDLPublish的WSDL链接和WSIL链接(http://myserver:8001/SimpleCGI/SimpleCGI.exe/inspection.wsil)也是如此。

之前有人见过吗?有人解决过吗?

1 个答案:

答案 0 :(得分:6)

好的,在这里找到答案:http://forums.iis.net/p/1100323/1745984.aspx

IIS7上的默认安全设置会从CGI应用的URL中删除路径信息。要绕过它(并允许Web服务工作),请将以下内容添加到与可执行文件相同的文件夹中的web.config文件中:

<configuration>
  <system.webServer>
    <handlers>
      <add name="ScriptMap1" path="SimpleCGI.exe" verb="*" modules="CgiModule" scriptProcessor="E:\Mypath\SimpleCGI.exe" resourceType="File" allowPathInfo="true" />
    </handlers>
  </system.webServer>
</configuration>