AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Webservice : Datenstruktur zurückgeben
Thema durchsuchen
Ansicht
Themen-Optionen

Webservice : Datenstruktur zurückgeben

Ein Thema von moelski · begonnen am 14. Apr 2010 · letzter Beitrag vom 14. Apr 2010
Antwort Antwort
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

Webservice : Datenstruktur zurückgeben

  Alt 14. Apr 2010, 08:40
Moin !

Hier findet sich eine ganz nette Anleitung zu einem Stand Alone Webservice:
http://www.digicoast.com/delphi_soap_standalone.html

Das funzt auch soweit ganz super.

Nun würde ich aber gerne eine Struktur zurückliefern. Einfach XML zurückgeben funktioniert nicht.

Kann mir jemand einen kurzen Hinweis geben wie ich das anstelle?

BsP:
Ich möchte über den Webservice eine Processliste abrufen.
Das könnte so aussehen:
XML-Code:
<Process1>
  <State>running</State>
  <lastState>Decode</lastState>
</Process1>
<Process2>
  <State>Stopped</State>
  <lastState>N/A</lastState>
</Process2>
Nur wie kriege ich das als Rückgabewert eines Funktionsaufrufes hin?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Webservice : Datenstruktur zurückgeben

  Alt 14. Apr 2010, 09:46
Moin Moin,

ich hatte mir die von Dir beschriebene Anleitung auch schon mal angesehen, weil mich das Thema auch interessiert hat.
Allerdings bin ich noch nicht dazu gekommen das ganze unter D2010 zu implementieren/zu testen.
Mit welcher Delphi Version hast Du das ganze umgesetzt ?

Zu Deiner Frage:
Wnn ich das richtig sehe müßtest Du eigentlich nur eine 2 Methode
analog zu HelloWord erstellen z.B. "getXMLData2" und in dieser Methode
dann Deine "XML-Struktur" als String zurück liefern.
result := '<Process1>'+13#10+'<State>running</State>'+ ... usw.

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Webservice : Datenstruktur zurückgeben

  Alt 14. Apr 2010, 10:04
Moin !

Zitat:
Mit welcher Delphi Version hast Du das ganze umgesetzt ?
D2010 Prof.
Funzt super wenn man vorher Indy updated aus dem SVN ...

Zitat:
und in dieser Methode
dann Deine "XML-Struktur" als String zurück liefern.
Nö. Das is ma ment genau der falsche Ansatz.
Damit kann ein Webservice Client nichts anfangen / nicht auswerten.
Zudem wird das XML nicht sauber in der SOAP Message dargestellt.


Ich weiss aber nun wie es geht

Hier ist es beschrieben: http://exposureroom.com/members/skumar/tutorials/post/3

Zunächst muss das Interface erweitert werden:
Delphi-Quellcode:
unit DatasetXMLIntf;

interface

uses
  Types, XSBuiltIns, uFieldInfo;

type
  IDatasetXML = interface(IInvokable)
    ['{C7785514-F56F-40AD-B943-950A162296BE}']
    function GetDatasetAsXML(const SelectSQL: WideString): WideString; stdcall;
    function GetSchemaInfo(const TableName: WideString): TFieldInfoArray; stdcall;
  end;

implementation

uses
  InvokeRegistry;

initialization
  InvRegistry.RegisterInterface(TypeInfo(IDatasetXML), '', '');

end.
Und dann muss man natürlich die Struktur definieren:

Delphi-Quellcode:
unit uFieldInfo;

interface

uses
  InvokeRegistry, XSBuiltIns;

type
  TFieldInfo = class(TRemotable)
  private
    FIsKeyField: Boolean;
    FFieldSize: Integer;
    FFieldName: string;
    FFieldType: string;
  published
    property FieldName: string read FFieldName write FFieldName;
    property FieldType: string read FFieldType write FFieldType;
    property FieldSize: Integer read FFieldSize write FFieldSize;
    property IsKeyField: Boolean read FIsKeyField write FIsKeyField;
  end;

  TFieldInfoArray = array of TFieldInfo;


implementation

initialization
  RemClassRegistry.RegisterXSClass(TFieldInfo, '', 'TFieldInfo', '');
  RemTypeRegistry.RegisterXSInfo(TypeInfo(TFieldInfoArray), '', 'TFieldInfoArray');

finalization
  RemClassRegistry.UnRegisterXSClass(TFieldInfo);
  RemTypeRegistry.UnRegisterXSInfo(TypeInfo(TFieldInfoArray));
end.

So und dann muss man das natürlich noch implementieren. Das geht dann in etwa so:
Delphi-Quellcode:
  function TMyAppServerSoapDataModule.GetSchemaInfo(const TableName: WideString): TFieldInfoArray; stdcall;
  var i: Integer;
  begin
      SetLength(Result, 1);
      for i := 0 to 1 -1 do
      begin
        Result[i] := TFieldInfo.Create;
        Result[i].FieldName := 'Hallo Feld';
        Result[i].FieldType := 'GetEnumName';
        Result[i].FieldSize := 1234;
        Result[i].IsKeyField := False;
      end; { for i := 0 to Dataset.FieldCount -1 do }
  end;

Hoffe geholfen zu haben
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  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 22:44 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