我创建了一个非常简单的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)也是如此。

有人看过吗?有人解决过吗?

最佳答案

OK,在这里找到答案: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>

10-05 19:42