Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Problem mit SOAP und Klassen (https://www.delphipraxis.net/70770-problem-mit-soap-und-klassen.html)

helen 4. Jun 2006 15:00


Problem mit SOAP und Klassen
 
Hallo zusammen,

ich habe einen WebService gebastelt, welcher Methoden enthält, die eine Klasse als Parameter erhalten, wie beispielsweise

Code:
   function UploadFile (HFS_File : THFS_fselem; Dir : String) : String; stdcall;
Die Klassendeklaration von THFS_elem sieht so aus:

Code:
...
type
   THFS_fselem = class(TRemotable)
      private
         _filename : String;
         _localdir : String;
         _size : Int64;
         _filedata : TMemoryStream;
      published
         Constructor Create;
         Destructor Destroy; override;

         property LocalDir : String read _localdir;

         procedure LoadFromFile (FileURL : String);
         procedure SaveToDir   (FileDIR : String);
   end;
Die WSDL exportiert allerdings nur die Property. Alle Methode, Konstruktoren, etc werden nicht abgebildet.

Dürfen TRemotable Klassen keine Methoden verwenden?

Gruß
Helen

czapie 4. Jun 2006 15:55

Re: Problem mit SOAP und Klassen
 
Hallo,

ich bin nicht 100% fit in WebServices, aber ich glaube WSDL kennt keine Klassen im eigentlichen Sinne.
Das heißt also auch keine Methoden usw. der zu übertragenen Klassen.

Ich hatte mal ein prinzipiell ähnliches Problem. Also ich wollte komplexe Klassen, komplexer als Beans,
übertragen. Hab das dann so gelöst, dass ich nur "Datenträger-Klassen" mit setter/getter-Methoden übertragen hab
und sowohl client- als auch serverseitig andere Klassen hatte die die komplexen Funktionen übernommen
haben. Weiß aber nicht, ob das so wirklich sauber ist.

Eric.

Alter Mann 5. Jun 2006 16:03

Re: Problem mit SOAP und Klassen
 
Hallo,

so würde es gehen:

Delphi-Quellcode:
{ Invokable-Interface IFileLoader }
...
 
  THFS_fselem = class(TRemotable)
  ...
  published
     function ExistsFile(const FileURL : WideString): Boolean;
  ...
  end;

  IFileLoader = interface(IInvokable)
  ['{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}']
    ...
    function ExistsFile(const FileURL : WideString): Boolean; stdcall;
  end;
Delphi-Quellcode:
{ Invokable-Implementierungsdatei für TFileLoader das IFileLoader implementiert }

type

  { TFileLoader }
  TFileLoader = class(TInvokableClass, IFileLoader)
  public
    function ExistsFile(const FileURL : WideString): Boolean; stdcall;
  end;

implementation

function TFileLoader.ExistsFile(const FileURL : WideString): Boolean; stdcall;
var
  HFS_fselem : THFS_fselem;
begin
  HFS_fselem := THFS_fselem.Create;
  try
     Result := HFS_fselem.ExistsFile(FileURL);
  finally
     HFS_fselem.Free;
  end;
end;
Gruß
Alter Mann


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 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