Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mehrere Webservices und Shared-types (https://www.delphipraxis.net/177573-mehrere-webservices-und-shared-types.html)

Sergej_Molotov 14. Nov 2013 10:05

Mehrere Webservices und Shared-types
 
Hallo Zusammen,

ich habe ein Problem beim Importieren von mehreren Webservices, die gemeinsam genutzte Typen verwenden. Es sieht wie folgt aus:

Webservice1: function GetBla: TBla
Webservice2: function GetBlub: TBla

TBla ist ein komplexer Datentyp.

Natürlich kann man in Delphi für jeden Webservice den Import starten, aber somit wäre die Klasse TBla in zwei Units enthalten. Hier müsste man bei der weiteren Programmierung tierisch auf den Namespace aufpassen.

Hat jemand eine Idee, wie man mehrere Webservices mit gemeinsam Typen in Delphi verwendet. Jax-ws sowie C# besitzen die Optionen, shared-types zu verwenden. Delphi wie immer nicht.

himitsu 14. Nov 2013 10:19

AW: Mehrere Webservices und Shared-types
 
Du brauchst doch nur den passenden Namespace zu verwenden, oder geht das etwa nicht?
Delphi-Quellcode:
function GetBla: Unit1.TBla;
function GetBlub: Unit2.TBla;
Bei der weiteren Verwendung kann eigentlich nichts schief gehn, da die strenge Typprüfung vom Delphi dir schon sagt, wenn du die Typen durcheinander bringst.
(außer man umgeht grob fahrlässig diese Typprüfungen)

Sergej_Molotov 14. Nov 2013 10:42

AW: Mehrere Webservices und Shared-types
 
Aber genau das möchte ich nicht.

Dieses TBla wird generell als DTO (Daten-Transfer-Object) verwendet und in eine andere Klasse konvertiert. Ich müsste dazu Konverterier-Routine duplizieren und wenn ich Webservice-Funktionen befüttern möchte, müssten ich dann ebenfalls zwei (n) Funktionen zum Konvertieren zu einen DTO erstellen, die das identische machen.

Es beseht eigentlich das Problem, das WSDLImp.exe die Typen in die selbe Unit generiert und nicht in separate Unit-Files. Java macht dieses natürlich und bei C# tauchen mehrere Services in einem Namespace auf.

himitsu 14. Nov 2013 12:03

AW: Mehrere Webservices und Shared-types
 
Dann kannst du die Typen wohl nur noch ableiten.

Delphi-Quellcode:
type
  //TBlaBla = Unit1.TBla; -> ohne Type wird nur ein Alias angelegt, aber für den Compiler und die RTTI bleibt es ein TBla aus der Unit Unit1
  TBlaBla = type Unit1.TBla;
  TBlaBlub = type Unit2.TBla;

function GetBla: TBlaBla;
function GetBlub: TBlaBlub;

mjustin 14. Nov 2013 12:44

AW: Mehrere Webservices und Shared-types
 
Zitat:

Zitat von Sergej_Molotov (Beitrag 1235823)
Aber genau das möchte ich nicht.

Dieses TBla wird generell als DTO (Daten-Transfer-Object) verwendet und in eine andere Klasse konvertiert. Ich müsste dazu Konverterier-Routine duplizieren und wenn ich Webservice-Funktionen befüttern möchte, müssten ich dann ebenfalls zwei (n) Funktionen zum Konvertieren zu einen DTO erstellen, die das identische machen.

Wenn ich es richtig verstehe soll dies gescheehen:

Delphi-Quellcode:
function Convert(const ABla: Unit1.TBla): TMeineAndereKlasse;
begin
  Result := TMyAndereKlasse.Create;

  // ... fülle Result mit Daten aus ABla (Typ aus Unit1)
end;

function Convert(const ABla: Unit2.TBla): TMeineAndereKlasse;
begin
  Result := TMyAndereKlasse.Create;

  // ... fülle Result mit Daten aus ABla (Typ aus Unit2)
end;
Ich habe keine Lösung, aber ich bewundere das Problem :)


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