Мой собственный код SOAP? - PullRequest
3 голосов
/ 21 ноября 2011

D6 prof.

Мы должны использовать службу SOAP XML.Я попытался импортировать wsdl и использовать интерфейс, сгенерированный Delphi, но это не удалось.

И: как я вижу, я должен предоставить имя пользователя и пароль в разделе XML, но я не знаю, как это сделать.с этим автоматическим интерфейсом ...

Я решил, что я предоставляю XML вручную.Это не проблема, проблема в том, как разместить на сервере ... Импорт wsdl знает, как вызвать сервер.Он знает URL, порт и т. Д.

Я хочу написать свой собственный код.Поскольку я думаю, что вызовы SOAP используют метод «Post», то, что я могу сделать легко.Но какой параметр нужен для поста?Какие параметры читаются сервером SOAP?

Чтобы понять, о чем я говорю, посмотрите этот код (FParams: TStrings):

procedure TDDHTTPObject.Post;
var
    WinHttpReq : variant;
    posts : string;
begin
    Result := '';
    WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
    try
        posts := EncodeParamsToURL(FParams);
        URL := URL + '?' + posts;
        WinHttpReq.Open('POST', URL, false);
        WinHttpReq.Send();
        Result := WinHttpReq.ResponseText;
    finally
        WinHttpReq := 0;
    end;
end;

Например:

Params['data'] = xmlstring;

или

Params['soap'] = xmlstring;

Знаете ли вы что-нибудь об этом?

Ответы [ 2 ]

3 голосов
/ 21 ноября 2011

Если вы используете .NET в качестве веб-сервера, вы можете увидеть методы и необработанный XML при переходе по URL-адресу WS, т. Е.: http://yourdomain.com/ws/ApplicationWebService.asmx

, XML доступен как для SOAP 1.1 и 1.2, так и для него.может выглядеть так (SOAP 1.1):

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <UserIdentificationHeader xmlns="http://yourdomain.com/ws">
      <UserAgent>string</UserAgent>
      <UserToken>string</UserToken>
    </UserIdentificationHeader>
  </soap:Header>
  <soap:Body>
    <MyTestMethod xmlns="http://yourdomain.com/ws" />
  </soap:Body>
</soap:Envelope>

Далее я использую «MSXML2.XMLHTTP» вот так:

var
  mhttp: OleVariant;

URL := 'http://yourdomain.com/ws/ApplicationWebService.asmx';
mhttp := CreateOleObject('MSXML2.XMLHTTP');
mhttp.Open('POST', URL, False);  // False=synchronously
mhttp.setRequestHeader('User-Agent', APP_WS_USER_AGENT); // optional
mhttp.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
mhttp.setRequestHeader('SoapAction', 'http://yourdomain.com/ws/' + 'MyTestMethod');

mhttp.send(TheSOAPXML);

if mhttp.Status = 202 then ShowMessage('ACCEPTED OK!');
3 голосов
/ 21 ноября 2011

Создайте свой собственный компонент THttpRio и передайте его вызову веб-службы. Используйте событие THttpRio.BeforeExecute, чтобы изменить поток SOAPRequest перед его отправкой в ​​службу. Существует множество примеров, но посмотрите на THttprio onBeforeExecute, который поменяет soapRequest как один из тех, что помогут вам.

...