2009-10-20 33 views
3

我創建了一個非常簡單的德爾福2010 CGI Web服務和我能夠獲得德爾福完全相同的問題2007年無法看到WSDL德爾福CGI與IIS7

我可調用接口看起來是這樣的:

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我們的Windows Server 2008的服務器上運行的IIS7。我創建了虛擬文件夾,配置執行權限,允許未指定的CGI模塊,使32個應用程序,然後終於能夠使用URL這樣一個從我的瀏覽器中看到的服務信息頁面:http://myserver:8001/SimpleCGI/SimpleCGI.exe

的配置步驟是不同的來自IIS6,但服務信息頁面在兩個IIS版本上看起來相同。它也有ISimpleTest的WSDL鏈接,就像它在IIS6上做的一樣。但在IIS6上,單擊此鏈接(如下所示的網址:http://myserver/SimpleCGI/SimpleCGI.exe/wsdl/ISimpleTest)可在瀏覽器中顯示預期的WSDL。但是,在IIS7中,單擊此鏈接只會再次顯示服務信息頁面。 WSDL鏈接用於IWSDLPublish和WSIL鏈接(http://myserver:8001/SimpleCGI/SimpleCGI.exe/inspection.wsil)也是如此。

以前有人看過這個嗎?任何人都解決過它?

回答

6

OK,找到了答案在這裏:http://forums.iis.net/p/1100323/1745984.aspx在IIS7

的默認安全設置從URL中刪除路徑信息的CGI應用程序。爲了規避它(並允許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>