2012-01-26 58 views
1

在下面的WSDL顯示中Delphi XE正在創建代碼,如此處所示。出的WebService是一個BizTalk服務器上運行:Delphi XE不會正確使用WebService

.... 
.... 

    PicassoBTSTest_PortalOrchestration_Port_Portal = interface(IInvokable) 
    ['{706CEB1F-0EC1-08C2-03C7-395C12905558}'] 
    **procedure Operation_Portal(var part: Variant); stdcall;** 
    end; 

function GetPicassoBTSTest_PortalOrchestration_Port_Portal(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): PicassoBTSTest_PortalOrchestration_Port_Portal; 

.... 
.... 

當調用WebService的我做如下所示:

procedure TForm1.Button2Click(Sender: TObject); 
var 
    X: PicassoBTSTest_PortalOrchestration_Port_Portal; 
    V: Variant; 
begin 
    X := GetPicassoBTSTest_PortalOrchestration_Port_Portal; 

    V := 'JUST A TEST'; 

    X.Operation_Portal(V); 
    ShowMessage(V); 
end; 

正如我們在我們的日誌這段代碼是撥打我們的後端正確見。但我們沒有收到正確的回覆。調用Operation_Portal後,V參數不變。它包含'JUST A TEST'文本,當它包含其他值時。

我試過從Delphi 2006運行代碼,它給了我相同的結果。

我在做什麼錯。爲什麼我沒有收到我們後端的迴應?

/布賴恩

<?xml version="1.0" encoding="UTF-8"?> 
-<wsdl:definitions xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:tns="http://techotel.dk/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://techotel.dk/" name="BizTalkServiceInstance">-<wsdl:documentation><CreationInfo Created="2012-01-26 10:31:43Z"/></wsdl:documentation>-<wsdl:types><xsd:schema targetNamespace="http://techotel.dk/Imports"/></wsdl:types>-<wsdl:message name="PicassoBTSTest_PortalOrchestration_Port_Portal_Operation_Portal_InputMessage"><wsdl:part name="part" type="xsd:anyType"/></wsdl:message>-<wsdl:message name="PicassoBTSTest_PortalOrchestration_Port_Portal_Operation_Portal_OutputMessage"><wsdl:part name="part" type="xsd:anyType"/></wsdl:message>-<wsdl:portType name="PicassoBTSTest_PortalOrchestration_Port_Portal"><wsdl:documentation>service "PicassoBTSTest.PortalOrchestration" port "Port_Portal"</wsdl:documentation>-<wsdl:operation name="Operation_Portal"><wsdl:documentation>operation "Operation_Portal"</wsdl:documentation><wsdl:input message="tns:PicassoBTSTest_PortalOrchestration_Port_Portal_Operation_Portal_InputMessage"/><wsdl:output message="tns:PicassoBTSTest_PortalOrchestration_Port_Portal_Operation_Portal_OutputMessage"/></wsdl:operation></wsdl:portType>-<wsdl:binding name="BasicHttpBinding_ITwoWayAsync" type="tns:PicassoBTSTest_PortalOrchestration_Port_Portal"><soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>-<wsdl:operation name="Operation_Portal"><wsdl:documentation>operation "Operation_Portal"</wsdl:documentation><soap:operation style="document" soapAction="Operation_Portal"/>-<wsdl:input><soap:body use="literal"/></wsdl:input>-<wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding>-<wsdl:service name="BizTalkServiceInstance">-<wsdl:port name="BasicHttpBinding_ITwoWayAsync" binding="tns:BasicHttpBinding_ITwoWayAsync"><soap:address location="http://akibiztalk01.internal.local/PicassoBTSTestPortal/PicassoBTSTest_PortalOrchestration_Port_Portal.svc"/></wsdl:port></wsdl:service></wsdl:definitions> 
+0

響應XML如何顯示? – mjn

+0

響應應該如下所示(我不知道如何使其可讀?)。

+0

您可以編輯您的問題補充的預期和實際** **響應XML,它可以在Delphi的一側被截獲或者使用一個HTTP嗅探器如Fiddler – mjn

回答

0

首先,我會驗證服務器發送一個XML SOAP響應回其中包含了預期值。

如果該值在響應中,則Delphi以某種方式無法將其分配給Variant變量。

該服務是否已在C#中開發?也許對於測試,編寫Delphi版本的服務並比較響應XML結構會很有幫助。

+0

我不知道它是如何寫入的。我會假設它是用C#編寫的,因爲它是BizTalk。我不能肯定地說,負責這件事的人今天不在工作。 另一個問題是,當我在參數Delphi中將方法調用與XML一起應用時,會出現一些字符。字符<變爲<,>變爲>我需要能夠發送乾淨的XML。 –

+0

我剛剛和WebService的開發者交談過。他將創建一個用C#開發的客戶端。感謝您的意見。 –