0
Tags:
delphi
Skrevet af
Bruger #270
@ 01.12.2001
Udvikling af en simpel SOAP klient
Hvis du har fulgt med i de seneste nyheder, har du formentlig hørt om
SOAP, Simple Object Access Protocol. Denne protokol tillader dig at kalde metoder på et remote objekt (et der ikke ligger på din computer) ved hjælp af HTTP og andre lignende protokoller. Hvis du bruger Delphi 6 Enterprise, har du indbygger support for SOAP.
For at lave en SOAP klient applikation ved hjælp af Delphi, skal du først vide
hvilken SOAP service du vil kalde. Et godt sted at starte er
XMethods.org webside. De lister
mange interessante SOAP services, nogle af den er lavet i Delphi.
For eksempel, en af servicescene er
Numbers to
Words service lavet af
Tom Chamberlain. Denne service er lavet i Delphi,
og tager ganske simpelt en floating-point tal (dollar værdi) og konveterer det til ord.
Præcis som på en check. (Amerikansk). For eksempel, 123 bliver til
"one hundred twenty three dollars and 00 cents".
For at kunne kalde denne service fra din Delphi klient skal du først kende
dens adresse på den
WSDL (Web Services Description Language) fil
du ønsker at kalde. I dette tilfælde er adressen :
http://powerofzen.com/cgi-bin/wordsforchecks.exe/wsdl/IWordsForCheck
Med denne information i hånden så start en ny Delphi applikation, og
åben "New Items" dialog boxen. Gøres ved at vælge File-->New-->Other i hoved menuen.
Klik på "WebServices" fanen, og du skulle se 3 ikoner. Vælg "Web Services Importer"
ikonet og tryk OK.
Nu er "Web Services Import" dialog boksen åben.
Klip URL'en fra før, og klik Generate. Delphi vil nu generer en ny unit ,
som indeholder et interface og en definition. Gem denne fil med fx. navnet WordsIntf.pas.
Koden skulle nu se således ud:
Unit WordsIntf;
interface
uses
Types, XSBuiltIns;
type
IWordsForCheck = interface(IInvokable)
['{E9300524-6C2F-4863-86DA-5A43DF5E5359}']
function GetWordsForCheck(const Value: Double): WideString; stdcall;
end;
implementation
uses InvokeRegistry;
initialization
InvRegistry.RegisterInterface(TypeInfo(IWordsForCheck), 'urn:UIWordsForChecks-IWordsForCheck', '');
end.
THTTPRIO Komponentet
Efter at have genereret et interface til den SOAP service du ønsker at kalde,
gå tilbage til din hoved form i din Delphi applikation. Kom et TLabeledEdit
komponent, en knap og et THTTPRIO komponent (Fra WerServices fanen) på din form.
Din main form skulle nu se således ud :
Klik på HTTPRIO1 komponenten og åben din Object Inspector ved at trykke F11. Der er 3
properties du skal sætte. det nemmeste er at starte fra bunden og gå op ad.
Først, set WSDLLocation til URL'en til WSDL filen. Dette skal være nøjagtigt den samme URL
som du brugte i "Web Service Import" dialog boksen.
Når URL'en er skrevet ind, skal Service propertypen sættes til 'IWordsForCheckservice'. Bemærk når du trykker på
den lille combobox for at vælge service "fryser" Delphi for en kort stund. Det er fordi Delphi
rent faktisk kommunikerer med SOAP serveren. Efter at have sat denne property ,
gør det samme for Port, den skal sættes til 'IWordsForCheckPort'. Dit SOAP objekt skulle nu se således ud:
object HTTPRIO1: THTTPRIO
WSDLLocation =
'http://powerofzen.com/cgi-bin/wordsforchecks.exe/wsdl/' +
'IWordsForCheck'
Service = 'IWordsForCheckservice'
Port = 'IWordsForCheckPort'
HTTPWebNode.Agent = 'Borland SOAP 1.1'
HTTPWebNode.UseUTF8InHeader = False
Converter.Options = [soSendMultiRefObj, soTryAllSchema]
Left = 128
Top = 8
end
Den Object Inspector skulle på nuværende tidspunkt indeholde de følgende værdier:
Næste skridt er at skrive den smule kode, som du selv skal skrive for at få det her i luften.
Tryk to gange på knappen, for at lave et OnClick event på din knap. Skriv så de her kode:
procedure TSOAPMainForm.GetAsWordsClick(Sender: TObject);
Var
I : IWordsForCheck;
begin
Screen.Cursor := crHourGlass;
Try
I := HTTPRIO1 as IWordsForCheck;
ShowMessage(I.GetWordsForCheck(StrToFloat(Number.Text)));
Finally
Screen.Cursor := crDefault;
End;
end;
Før du kompilerer projektet, skal du sikrere dig at interface unit'en (WordsIntf.pas) er
inkluderet i din uses klausul i din main form. I koden oven over bruges en instans af THTTPRIO
komponenten til at lave et interface til en SOAP service. Med dette interface "i hånden",
er det meget nemt at kalde GetWordsForCheck() metoden som er implementeret på SOAP serveren.
Som du kan se er det meget nemt at kalde SOAP services fra Delphi. Naturligvis er proceduren
ens for alle andre SOAP services, du skal bare udskifte URL'en på din WSDL fil!
Hvis du kører applikationen vil du få et resultat alla det her :
For yderlig detaljer om SOAP og om at lave SOAP klienter, kig i kapitel 31 i Delphi Developer's Guide.
Download eksempel kode
Download
SOAPclient.zip
(349 kB) Som indeholder alt koden fra denne artikkel. BEMÆRK venligst at kode kræver Delphi 6
Enterprise og en internet forbindelse.
Note: Siden servicen "Numbers to Words" ikke er hosted af undertegnet, men hos tredje part, kan jeg,
eller dem der til en hver tid hoster denne artikel, garantere performance eller eksistensen af denne, efter publicering
af denne artikel.
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (1)
Fin introduktion.
Synd at skærmbilleder ikke længere er tilgængelige, men teksten forklarer alligevel det hele.
Du skal være
logget ind for at skrive en kommentar.