我创建了一个非常简单的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>