2012-01-26 2 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, 또는 Fiddler와 같은 HTTP 스니퍼를 사용하십시오. – mjn

답변

0

우선 서버가 예상 값을 포함하는 다시 XML의 SOAP 응답을 보냅니다 있는지 확인합니다.

값이 응답에 있으면 Delphi가 어떻게 든 Variant 변수에 할당하지 못합니다.

서비스가 C#으로 개발 되었습니까? 테스트를 위해 Delphi 버전의 서비스를 작성하고 응답 XML 구조를 비교하는 것이 도움이 될 수 있습니다.

+0

작성 방법을 정확하게 모르겠습니다. C#으로 작성된 것으로 가정합니다. BizTalk입니다. 이 책임자가 오늘 일하고 있지 않기 때문에 나는 확실히 말할 수 없다. 또 다른 문제는 매개 변수 Delphi에서 XML을 사용하여 메서드 호출을 적용하면 일부 문자가 이스케이프됩니다. 문자 <<이되고>는 >이됩니다. 깨끗한 XML을 전송할 수 있어야합니다. –

+0

방금 ​​WebService의 개발자와 이야기했습니다. 그는 C#으로 개발 된 클라이언트를 만들 것입니다. 의견을 보내 주셔서 감사합니다. –

관련 문제