Delphi SOAP a Document/literal

vložil Radek Červinka 8. října 2019 14:08

Ačkoliv REST je momentálně na vrcholu popularity, sem tam je potřeba i SOAP.

Delphi podporuje SOAP od cca Delphi 5 (tj. rok 2000). Bohužel vždy podporoval jen RPC/encoded variantu, což se někdy jeví jako problém, zvláště pokud máte komunikovat se systémem, který podporuje SOAP pouze ve variantě Document/literal. Ukázka rozdílů Literal vs. Encoded, RPC- vs. Document.

Jediná rozumná implementace SOAP co znám pro variantu Document/literal (ale podporuje i RPC) pro Delphi je IndySOAP. Jedná se o open source knihovnu, dostupnou na IndySOAP, přičemž verze z SVN je unicode kompatibilní.

Je tam celkem dost příkladů, kdy pro rozhraní definujete interface, ale jen bych upozornil na drobnou (podstatnou) informaci

  IKeyServer = Interface (IIdSoapInterface) ['{7C6A85A1-E623-4D6F-BA03-915BD49CE7D4}']
       {!Encoding: Document;}
    function GetNextKey ( AName : String ): integer; stdcall;
    procedure ResetKey ( AUserName, APassword, AName : string; ANewValue : integer); stdcall;
    procedure ListKeys(out VList : TKeyList); stdcall;
  end;

Přepnutí mezi RPC a document mode je přes {!Encoding: Document;}, což mi chvilku trvalo. Jelikož knihovna má kořeny někdy kolem D5, kdy RTTI bylo v plenkách a o atributech se ani nezdálo, umožňuje přes preprocessor z adresáře tools (IdSoapTools.exe, pro starší verze delphi jako balíček do IDE) vygenerovat .res soubor s něčím jako je moderní RTTI (včetně uvedeného Encoding). Podle zdrojáků by to mělo jít i bez toho exe za pomocí normálního moderního RTTI, ale moc jsem to nerozchodil.

Každopádně je to mně známá jediná možnost jak dosáhnout na Document/literal a zadarmo (update: myslel jsem pro server, pro klient možné řešení v komentářích). Toto není návod, spíše takový hint.

Tagy: , ,

Komponenty

Komentáře

9.10.2019 22:37:50 #

Jan Lesniak

Nejsem si jist, ale nedosáhnu stejného výsledku (alespoň v delphi 10.3) když na WebModule SOAP serveru vytvořeného přes průvodce přidám komponentu TOPToSoapDomConvert a přiřadím ji do vlastnosti Converter komponenty THTTPSoapPascalInvoker. Pak v TOPToSoapDomConvert.Options zapnu volby soDocument a soLiteralParams?

Jan Lesniak

11.10.2019 15:52:31 #

radekc

Po pravdě jsem o tom nikdy neslyšel a ani jsem na to nikde nenarazil, zkusím.

radekc

14.10.2019 8:49:16 #

Pavel

V TOPToSoapDomConvert.Options volby soDocument a soLiteralParams řeší pouze SOAP klienta. SOAP server běží vždy jako RPC. (Alespoň v Delphi 10.1).

Pavel

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců