2012-01-23 55 views
7
的URL端點

我將一個2007年德爾福計劃,德爾福XE2並具有以下錯誤消息的問題:德爾福XE2 HTTPRIO無法檢索服務/端口

無法檢索服務的URL端點/端口「/」從WSDL的「http:// ......」

我連接的服務,是寫在2007年德爾福

2007年它編譯和運行流暢。 在XE2上使用相同的代碼時,會出現錯誤。

我已經嘗試使用新的WSDL導入器重新導入界面,但默認設置沒有喜悅。

我也嘗試設置端口和服務名稱,錯誤仍然存​​在。不知道什麼信息是有用的,但據我所知可以連接。

這是我使用

<operation name="CheckRegistration"> 
    <soap:operation soapAction="urn:ScubaUpdateWSIntf-IScubaUpdateWS#CheckRegistration" style="rpc"/> 
    <input> 
    <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  namespace="urn:ScubaUpdateWSIntf-IScubaUpdateWS"/> 
    </input> 
    <output> 
    <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:ScubaUpdateWSIntf-IScubaUpdateWS"/> 
    </output> 
</operation> 

這個方法的操作消息:

<message name="CheckRegistration10Request"> 
    <part name="centreId" type="xs:int"/> 
    <part name="centreName" type="xs:string"/> 
    <part name="checkActiveOnly" type="xs:boolean"/> 
</message> 
<message name="CheckRegistration10Response"> 
    <part name="return" type="xs:boolean"/> 
</message> 

除了導入WSDL,扔上HTTPRIO並調用與

方法
(HTTPRIO1 as IScubaUpdateWS).CheckRegistration(strtoint(tcentre),tcentreName,true); 

我不認爲我在做其他任何事情,因爲我說相同的代碼在Delph上工作i 2007.

+2

在設計時,當您將HTTPRIO.WSDLLocation屬性之一,你可以選擇HTTPRIO.Service和HTTPRIO.Port屬性嗎?您應該能夠在設計時設置服務和端口,如果沒有,那麼URL可能有問題。我有這個問題很多次,似乎只要我在設計時正確設置一次,然後錯誤消失.. –

+0

嗨,約翰,謝謝,在德爾福2007 IDE的端口是空白的,以及在Xe2中。設置它只是改變錯誤信息。 我剛剛嘗試連接到另一個delphi WSDL,並有相同的問題。我將嘗試連接到C#WSDL或其中一個Amazon DLL,以查看是否可以確定是否只是delphi wsdls導致此問題。我會在今天晚些時候回覆。 –

+0

剛剛確認Xe2可以連接到.net Web服務。我的delphi web服務中必須有一些導致端點錯誤的東西。 –

回答

2

解決。好樣的! 就像Delphi 2007找到的那樣,Delphi XE2似乎找到了2個服務。 我正在使用的程序是從註冊表中讀取WSDL位置並進行設置。在德爾福2007年,這是沒有問題的,因爲它正在採取唯一的服務和做出選擇的端口/服務。在Delphi XE2上,重置WSDL位置會導致端口和服務被清除。 感謝@JohnEasley指引我朝着正確的方向。 要解決我現在不得不在更改WSDL位置後使用下面的代碼。 不知道它會爲每一個工作,因爲我承擔的第一項是需要

servicenames:=Tdomstrings.Create; 
portnames:=Tdomstrings.Create; 
HTTPRIO1.WSDLItems.GetServices(servicenames); 
if servicenames.count>0 then 
begin 
HTTPRIO1.Service:=servicenames[0]; 
HTTPRIO1.WSDLItems.GetPortsForService(servicenames[0],portnames); 
if portnames.count>0 then 
    HTTPRIO1.Port:=portnames[0]; 
end; 
servicenames.clear; 
servicenames.Free; 
portnames.clear; 
portnames.Free; 

謝謝你們

+0

Richard,Tanks for ans,但是當我使用上面的代碼時遇到了問題,找不到活動文檔。所以我將它變爲活動explicitley。 – SSE

+0

在運行時設置屬性時如何解決「無活動文檔」? – NizamUlMulk