AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Mehrere Webservices und Shared-types
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Webservices und Shared-types

Ein Thema von Sergej_Molotov · begonnen am 14. Nov 2013 · letzter Beitrag vom 14. Nov 2013
Antwort Antwort
Sergej_Molotov

Registriert seit: 18. Jul 2006
61 Beiträge
 
Delphi 11 Alexandria
 
#1

Mehrere Webservices und Shared-types

  Alt 14. Nov 2013, 11:05
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.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

AW: Mehrere Webservices und Shared-types

  Alt 14. Nov 2013, 11:19
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (14. Nov 2013 um 11:22 Uhr)
  Mit Zitat antworten Zitat
Sergej_Molotov

Registriert seit: 18. Jul 2006
61 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Mehrere Webservices und Shared-types

  Alt 14. Nov 2013, 11:42
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.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: Mehrere Webservices und Shared-types

  Alt 14. Nov 2013, 13:03
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Mehrere Webservices und Shared-types

  Alt 14. Nov 2013, 13:44
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
Michael Justin
  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 16:36 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