AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Rückgabe von Daten aus einem Webservice
Thema durchsuchen
Ansicht
Themen-Optionen

Rückgabe von Daten aus einem Webservice

Ein Thema von prsearcher · begonnen am 14. Dez 2010 · letzter Beitrag vom 14. Dez 2010
Antwort Antwort
Benutzerbild von prsearcher
prsearcher

Registriert seit: 29. Jun 2007
4 Beiträge
 
Delphi 5 Enterprise
 
#1

Rückgabe von Daten aus einem Webservice

  Alt 14. Dez 2010, 08:58
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:
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;
Wie gesagt, bei komplexen Datentypen bräuchte ich Hilfe.
Hat jemand ein Idee?

prsearcher
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Rückgabe von Daten aus einem Webservice

  Alt 14. Dez 2010, 11:05
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)
  Mit Zitat antworten Zitat
Benutzerbild von prsearcher
prsearcher

Registriert seit: 29. Jun 2007
4 Beiträge
 
Delphi 5 Enterprise
 
#3

AW: Rückgabe von Daten aus einem Webservice

  Alt 14. Dez 2010, 12:00
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz