Проблема с использованием SOAP сервера в Delphi

при импорте внешнего SOAP сервера через WSDL-Importer в Delphi XE7 получаю следующую функцию:

function AttrSearch(const arg0: ArrayOfanyType; const arg1: string; const arg2: Integer): DocListInfo; stdcall; ArrayOfanyType = array of String;

Пытаюсь выполнить данную функцию:

    var
    Conditions : ArrayOfAnyType;   
    begin
    SetLength(Conditions, 1);
    Conditions[0] := '{id:''1'', values:''2695-83''}';
    DocList := SoapSrv.AttrSearch(Conditions, '', -1);
    end;

Но данный код на последней строке вызывает ошибку, при обращении к SOAP серверу. Для документа XML должен существовать документ более высокого уровня.

На сервер отправляется следующий XML-файл

   <NS1:AttrSearch>
            <arg0  xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[1]">
                <item>
                    {id:'1', values:'2695-83'}
                </item>
            </arg0>
            <arg1
                xsi:type="xsd:string">
                </arg1>
            <arg2
                xsi:type="xsd:int">
                -1
                </arg2>
            </NS1:AttrSearch>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

Должен же отправляться XML-файл

         <ns1:AttrSearch>
            <arg0 xsi:type="ns1:ArrayOfanyType">
                <anyType xsi:type="SOAP-ENC:Struct">
                    <id xsi:type="xsd:int">0</id>
                    <value xsi:type="xsd:string">ГОСТ БЕТОН</value>
                </anyType><anyType xsi:type="SOAP-ENC:Struct">
                    <id xsi:type="xsd:int">1</id>
                    <values SOAP-ENC:arrayType="xsd:int[1]" xsi:type="SOAP-ENC:Array">
                        <item xsi:type="xsd:int">9041212</item>
                    </values>
                    <lop xsi:type="xsd:string">or</lop>
                </anyType>
            </arg0>
            <arg1 xsi:nil="true"/>
            <arg2 xsi:type="xsd:int">-1</arg2>
        </ns1:AttrSearch>

в PHP кусок кода по использованию данной функции выглядит следующим образом:

class SearchConditionString { 
    var $id; 
    var $value; 
         
    function __construct($id, $value) { 
        $this->id = $id; 
        $this->value = $value; 
    } 
}; 

$conditions[] = new SearchConditionString( 
    1,                                 
    "2695-83"                  
    );

Как правильно использовать данную функцию в Delphi XE7? Или я неправильно импортировал WSDL схему?

Заранее спасибо.


Ответы (0 шт):