|
Antwort |
Registriert seit: 29. Jun 2007 4 Beiträge Delphi 5 Enterprise |
#1
Guten Morgen,
ich suche Hilfe für die Entgegennahme der Daten, die aus einem Webservice zurückgegeben werden. Ich benutze den MSSOAP.SoapClient30 und die Entgegennahme von Daten klappt, wenn es nur EIN STRING ist. Wenn die Datenstruktur komplex(er) ist, gelingt mir nicht die Konvertierung in brauchbare Daten. Mein Codebeispiel bei dem die Nutzung als STRING funktioniert:
Delphi-Quellcode:
Wie gesagt, bei komplexen Datentypen bräuchte ich Hilfe.
var
SoapClient: Variant; Ans: Variant; begin SoapClient := CreateOleObject('MSSOAP.SoapClient30'); SoapClient.mssoapinit('http://www.holidaywebservice.com/Holidays/US/Dates/USHolidayDates.asmx?WSDL'); Ans := SoapClient.GetGoodFriday(2011); ShowMessage(Ans); end; Hat jemand ein Idee? prsearcher |
Zitat |
Registriert seit: 5. Jan 2005 Ort: Stadthagen 9.454 Beiträge Delphi 10 Seattle Enterprise |
#2
Die benötigten Strukturen stehen in der WDSL-Beschreibung.
Am einfachsten wäre es, den WDSL-Importer von Delphi zu benutzen - aber ob Delphi 5 den schon hat? So sieht das mit Delphi 2010 aus (allerdings finde ich hier keine komplexen Datenstrukturen):
Delphi-Quellcode:
// ************************************************************************ //
// Die in dieser Datei deklarierten Typen wurden aus Daten der unten // beschriebenen WSDL-Datei generiert: // WSDL : http://www.holidaywebservice.com/Holidays/US/Dates/USHolidayDates.asmx?WSDL // >Import : http://www.holidaywebservice.com/Holidays/US/Dates/USHolidayDates.asmx?WSDL>0 // Codierung : utf-8 // Version: 1.0 // (14.12.2010 12:01:55 - - $Rev: 25127 $) // ************************************************************************ // unit USHolidayDates; interface uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns; const IS_REF = $0080; type // ************************************************************************ // // Die folgenden Typen, auf die im WSDL-Dokument Bezug genommen wird, sind in dieser Datei // nicht repräsentiert. Sie sind entweder Aliase[@] anderer repräsentierter Typen oder auf sie wurde Bezug genommen, // aber sie sind in diesem Dokument nicht[!] deklariert. Die Typen aus letzterer Kategorie // sind in der Regel vordefinierten/bekannten XML- oder Embarcadero-Typen zugeordnet; sie könnten aber auf // ein inkorrektes WSDL-Dokument hinweisen, das einen Schematyp nicht deklariert oder importiert hat. // ************************************************************************ // // !:int - "http://www.w3.org/2001/XMLSchema"[Gbl] // !:dateTime - "http://www.w3.org/2001/XMLSchema"[Gbl] // !:string - "http://www.w3.org/2001/XMLSchema"[] dateTime = class(TXSDateTime) end; { "http://www.27seconds.com/Holidays/US/Dates/"[GblElm] } // ************************************************************************ // // Namespace : http://www.27seconds.com/Holidays/US/Dates/ // soapAction: http://www.27seconds.com/Holidays/US/Dates/%operationName% // Transport : http://schemas.xmlsoap.org/soap/http // Stil : document // Bindung : USHolidayDatesSoap // Service : USHolidayDates // Port : USHolidayDatesSoap // URL : http://www.holidaywebservice.com/Holidays/US/Dates/USHolidayDates.asmx // ************************************************************************ // USHolidayDatesSoap = interface(IInvokable) ['{B6CD6BA8-97F2-BB71-B66E-69187A32861C}'] function GetNewYear(const year: Integer): TXSDateTime; stdcall; function GetMartinLutherKingDay(const year: Integer): TXSDateTime; stdcall; function GetPresidentsDay(const year: Integer): TXSDateTime; stdcall; function GetAbrahamLincolnsBirthday(const year: Integer): TXSDateTime; stdcall; function GetValentinesDay(const year: Integer): TXSDateTime; stdcall; function GetGeorgeWashingtonsBirthday(const year: Integer): TXSDateTime; stdcall; function GetGoodFriday(const year: Integer): TXSDateTime; stdcall; function GetEaster(const year: Integer): TXSDateTime; stdcall; function GetSaintPatricksDay(const year: Integer): TXSDateTime; stdcall; function GetAprilFoolsDay(const year: Integer): TXSDateTime; stdcall; function GetMothersDay(const year: Integer): TXSDateTime; stdcall; function GetMemorialDay(const year: Integer): TXSDateTime; stdcall; function GetCincoDeMayo(const year: Integer): TXSDateTime; stdcall; function GetFathersDay(const year: Integer): TXSDateTime; stdcall; function GetFlagDay(const year: Integer): TXSDateTime; stdcall; function GetIndependenceDay(const year: Integer): TXSDateTime; stdcall; function GetLaborDay(const year: Integer): TXSDateTime; stdcall; function GetColumbusDay(const year: Integer): TXSDateTime; stdcall; function GetHalloweenDay(const year: Integer): TXSDateTime; stdcall; function GetThanksgivingDay(const year: Integer): TXSDateTime; stdcall; function GetBlackFriday(const year: Integer): TXSDateTime; stdcall; function GetVeteransDay(const year: Integer): TXSDateTime; stdcall; function GetChristmasDay(const year: Integer): TXSDateTime; stdcall; function GetNewYearsEve(const year: Integer): TXSDateTime; stdcall; end; // ************************************************************************ // // Namespace : http://www.27seconds.com/Holidays/US/Dates/ // Bindung : USHolidayDatesHttpGet // Service : USHolidayDates // Port : USHolidayDatesHttpGet // ************************************************************************ // USHolidayDatesHttpGet = interface(IInvokable) ['{38B1DA29-A668-F33D-9DDA-49B235C31176}'] function GetNewYear(const year: string): dateTime; stdcall; function GetMartinLutherKingDay(const year: string): dateTime; stdcall; function GetPresidentsDay(const year: string): dateTime; stdcall; function GetAbrahamLincolnsBirthday(const year: string): dateTime; stdcall; function GetValentinesDay(const year: string): dateTime; stdcall; function GetGeorgeWashingtonsBirthday(const year: string): dateTime; stdcall; function GetGoodFriday(const year: string): dateTime; stdcall; function GetEaster(const year: string): dateTime; stdcall; function GetSaintPatricksDay(const year: string): dateTime; stdcall; function GetAprilFoolsDay(const year: string): dateTime; stdcall; function GetMothersDay(const year: string): dateTime; stdcall; function GetMemorialDay(const year: string): dateTime; stdcall; function GetCincoDeMayo(const year: string): dateTime; stdcall; function GetFathersDay(const year: string): dateTime; stdcall; function GetFlagDay(const year: string): dateTime; stdcall; function GetIndependenceDay(const year: string): dateTime; stdcall; function GetLaborDay(const year: string): dateTime; stdcall; function GetColumbusDay(const year: string): dateTime; stdcall; function GetHalloweenDay(const year: string): dateTime; stdcall; function GetThanksgivingDay(const year: string): dateTime; stdcall; function GetBlackFriday(const year: string): dateTime; stdcall; function GetVeteransDay(const year: string): dateTime; stdcall; function GetChristmasDay(const year: string): dateTime; stdcall; function GetNewYearsEve(const year: string): dateTime; stdcall; end; // ************************************************************************ // // Namespace : http://www.27seconds.com/Holidays/US/Dates/ // Bindung : USHolidayDatesHttpPost // Service : USHolidayDates // Port : USHolidayDatesHttpPost // ************************************************************************ // USHolidayDatesHttpPost = interface(IInvokable) ['{F85448EA-3AD3-4D27-EE8F-B6A99FC21C12}'] function GetNewYear(const year: string): dateTime; stdcall; function GetMartinLutherKingDay(const year: string): dateTime; stdcall; function GetPresidentsDay(const year: string): dateTime; stdcall; function GetAbrahamLincolnsBirthday(const year: string): dateTime; stdcall; function GetValentinesDay(const year: string): dateTime; stdcall; function GetGeorgeWashingtonsBirthday(const year: string): dateTime; stdcall; function GetGoodFriday(const year: string): dateTime; stdcall; function GetEaster(const year: string): dateTime; stdcall; function GetSaintPatricksDay(const year: string): dateTime; stdcall; function GetAprilFoolsDay(const year: string): dateTime; stdcall; function GetMothersDay(const year: string): dateTime; stdcall; function GetMemorialDay(const year: string): dateTime; stdcall; function GetCincoDeMayo(const year: string): dateTime; stdcall; function GetFathersDay(const year: string): dateTime; stdcall; function GetFlagDay(const year: string): dateTime; stdcall; function GetIndependenceDay(const year: string): dateTime; stdcall; function GetLaborDay(const year: string): dateTime; stdcall; function GetColumbusDay(const year: string): dateTime; stdcall; function GetHalloweenDay(const year: string): dateTime; stdcall; function GetThanksgivingDay(const year: string): dateTime; stdcall; function GetBlackFriday(const year: string): dateTime; stdcall; function GetVeteransDay(const year: string): dateTime; stdcall; function GetChristmasDay(const year: string): dateTime; stdcall; function GetNewYearsEve(const year: string): dateTime; stdcall; end; function GetUSHolidayDatesSoap(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): USHolidayDatesSoap; function GetUSHolidayDatesHttpGet(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): USHolidayDatesHttpGet; function GetUSHolidayDatesHttpPost(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): USHolidayDatesHttpPost; implementation uses SysUtils; function GetUSHolidayDatesSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): USHolidayDatesSoap; const defWSDL = 'http://www.holidaywebservice.com/Holidays/US/Dates/USHolidayDates.asmx?WSDL'; defURL = 'http://www.holidaywebservice.com/Holidays/US/Dates/USHolidayDates.asmx'; defSvc = 'USHolidayDates'; defPrt = 'USHolidayDatesSoap'; var RIO: THTTPRIO; begin Result := nil; if (Addr = '') then begin if UseWSDL then Addr := defWSDL else Addr := defURL; end; if HTTPRIO = nil then RIO := THTTPRIO.Create(nil) else RIO := HTTPRIO; try Result := (RIO as USHolidayDatesSoap); if UseWSDL then begin RIO.WSDLLocation := Addr; RIO.Service := defSvc; RIO.Port := defPrt; end else RIO.URL := Addr; finally if (Result = nil) and (HTTPRIO = nil) then RIO.Free; end; end; function GetUSHolidayDatesHttpGet(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): USHolidayDatesHttpGet; const defWSDL = 'http://www.holidaywebservice.com/Holidays/US/Dates/USHolidayDates.asmx?WSDL'; defURL = ''; defSvc = 'USHolidayDates'; defPrt = 'USHolidayDatesHttpGet'; var RIO: THTTPRIO; begin Result := nil; if (Addr = '') then begin if UseWSDL then Addr := defWSDL else Addr := defURL; end; if HTTPRIO = nil then RIO := THTTPRIO.Create(nil) else RIO := HTTPRIO; try Result := (RIO as USHolidayDatesHttpGet); if UseWSDL then begin RIO.WSDLLocation := Addr; RIO.Service := defSvc; RIO.Port := defPrt; end else RIO.URL := Addr; finally if (Result = nil) and (HTTPRIO = nil) then RIO.Free; end; end; function GetUSHolidayDatesHttpPost(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): USHolidayDatesHttpPost; const defWSDL = 'http://www.holidaywebservice.com/Holidays/US/Dates/USHolidayDates.asmx?WSDL'; defURL = ''; defSvc = 'USHolidayDates'; defPrt = 'USHolidayDatesHttpPost'; var RIO: THTTPRIO; begin Result := nil; if (Addr = '') then begin if UseWSDL then Addr := defWSDL else Addr := defURL; end; if HTTPRIO = nil then RIO := THTTPRIO.Create(nil) else RIO := HTTPRIO; try Result := (RIO as USHolidayDatesHttpPost); if UseWSDL then begin RIO.WSDLLocation := Addr; RIO.Service := defSvc; RIO.Port := defPrt; end else RIO.URL := Addr; finally if (Result = nil) and (HTTPRIO = nil) then RIO.Free; end; end; initialization InvRegistry.RegisterInterface(TypeInfo(USHolidayDatesSoap), 'http://www.27seconds.com/Holidays/US/Dates/', 'utf-8'); InvRegistry.RegisterDefaultSOAPAction(TypeInfo(USHolidayDatesSoap), 'http://www.27seconds.com/Holidays/US/Dates/%operationName%'); InvRegistry.RegisterInvokeOptions(TypeInfo(USHolidayDatesSoap), ioDocument); InvRegistry.RegisterInterface(TypeInfo(USHolidayDatesHttpGet), 'http://www.27seconds.com/Holidays/US/Dates/', 'utf-8'); InvRegistry.RegisterDefaultSOAPAction(TypeInfo(USHolidayDatesHttpGet), ''); InvRegistry.RegisterInterface(TypeInfo(USHolidayDatesHttpPost), 'http://www.27seconds.com/Holidays/US/Dates/', 'utf-8'); InvRegistry.RegisterDefaultSOAPAction(TypeInfo(USHolidayDatesHttpPost), ''); RemClassRegistry.RegisterXSInfo(TypeInfo(dateTime), 'http://www.27seconds.com/Holidays/US/Dates/', 'dateTime'); end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60) |
Zitat |
Registriert seit: 29. Jun 2007 4 Beiträge Delphi 5 Enterprise |
#3
Danke Sir Rufo.
Mit dem WDSL-Importer sieht das schon machbarer aus. Der steht mir in meiner Delphi-Version leider nicht zur Verfügung. In dem Beispiel mit den US-Feiertagen klappt das Auslesen auch bei mir. Ich habe aber auch versucht einen Webservice zu nutzen bei dem 2 Strings zurückgegeben werden und die krieg ich aus dem Variant-Typ irgendwie nicht heraus. in der WDSL-Datei sehe ich, dass es 2 Strings sein müssen. Vielleicht da noch eine Idee?? prsearcher |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |