用IIS7在Delphi CGI上看不到WSDL

Cob*_*ger 3 delphi iis iis-7 soap cgi

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

我的invokable接口如下所示:

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

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

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

我将生成的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)也是如此.

有人见过这个吗?有人解决过吗?

Cob*_*ger 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>
Run Code Online (Sandbox Code Playgroud)