Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   TSocketConnection vs. TIdTCPClient (https://www.delphipraxis.net/195903-tsocketconnection-vs-tidtcpclient.html)

Zwirbel 5. Apr 2018 13:16

TSocketConnection vs. TIdTCPClient
 
Hallo,

die Aufgabenstellung ist über eine TCP-Adresse und Port eine Abfrage (per XML-codiertem Telegramm) an eine Daten-Schnittstelle zu stellen und dann als Antwort XML-Daten zurück zu erhalten. Die Daten-Schnittstelle (der Server sozusagen) wird also von einer Fremdfirma betrieben. Meine Aufgabe ist nun den Client zu entwickeln der die Daten abfragt.

In einer alten Delphi Applikation haben wir dafür die ICS-Komponenten (konkret TWSocket / http://www.overbyte.eu/frame_index.html) verwendet. Nun soll mit Delphi 10 Seattle eine neue Schnittstelle entwickelt werden und ich würde gerne ohne unnötige dritte Komponenten auskommen, auch wenn sie kostelos sind wie ICS. Durch Recherche bin ich nun auf die Komponenten TSocketConnection und TIdTCPClient gestossen. Welche der beiden sollte man verwenden oder sind beide nicht geeignet? Zusätzlich ist mein Problem, dass ich die Schnittstelle nicht auf meinem Entwicklungs-Rechner ansprechen kann. Die Schnittstelle steht ausschließlich auf einem Server unseres Kunden zur Verfügung. Ich kann also im Prinzip nur durch trial and error überhaupt an die Schnittstelle andocken, mal eben schnell im object inspector von Delphi ein paar properties setzen und bereits konkrete Abfragen generieren ist also nicht drin. Das einzige was ich vom Kunden zur Verfügung gestellt bekommen habe ist eine XSD-Datei mit dem XML-Schema der Datei. Daraus habe ich mir in Delphi mit dem "Experte für XML-Datenanbindung" eine entsprechende PAS mit der XML-Datenbindung erstellen lassen, das sind fast 30.000 Zeilen Code.

Auch nach stundenlanger Suche im Internet habe ich keine Beispiele gefunden die ein mehr oder weniger aussagekräftiges Beispiel für die Komponenten TSocketConnection oder TIdTCPClient zeigen. Wenn ich es richtig sehe, dann macht es Sinn im Zusammenhang mit TSocketConnection auch die Komponenten TXMLTransformClient und TXMLTransformProvider zu verwenden. Nur, wie "verknubbelt" man dann die entsprechenden properties und events dieser drei Komponenten?

Die Deluxe-Lösung wäre natürlich ich könnte durch die zurück gelieferten XML-Daten in einem ClientDataSet durch laufen, um Datensatz für Datensatz abzuarbeiten.

Konkrete Fragen zusammengefasst:

1) Welche der Komponenten TSocketConnection oder TIdTCPClient (kombiniert mit TXMLTransformClient und TXMLTransformProvider) ist für die Aufgabestellung besser geeignet? Gibt es dazu Beispiele?
2) Welche Komponenten benötigt man, um durch die zurück gelieferten Daten in einem ClientDataSet zu laufen? Gibt es dazu Beispiele?

Vielen Dank im Voraus.

mjustin 5. Apr 2018 13:27

AW: TSocketConnection vs. TIdTCPClient
 
TIdTCPClient ist gut geeignet wenn man sich ein eigenes Protokoll oder ein nicht bei Indy standardmäßig enthaltenes realisieren will.

Für XML / Web Services ist allerdings meist HTTP(S) im Einsatz. Es wäre daher zu prüfen ob der Kunde HTTP(S) einsetzt, dann kann man die Indy Komponente TIdHTTP einsetzen.
Damait spart man die Neuimplementierung dieses Protokolls.

p.s. falls es nicht HTTP(S) ist, dann ist der Aufruf mit TIdTCPClient trivial - es gibt darin Methoden um die Daten entweder mit vorangestellter Längenangabe oder mit einem Terminator (z.B. ein Nullbyte) zu senden und zu empfangen.

Sherlock 5. Apr 2018 13:29

AW: TSocketConnection vs. TIdTCPClient
 
1) TIdTCPClient ist auch nur eine Drittkomponente, auch wenn sie mitgeliefert wird.
1a) solltest Du die verwenden wollen, kommt etwas/einiges an Umgewöhnung auf Dich zu.
2) TSocketConnection hat laut OH etwas mit DataSnap zu tun und dürfte am Ende auch Indy sein. Dann lieber direkt TIdTCPClient verwenden.
3) Die größte Zeitersparnis dürfte sein, bei den ICS zu bleiben. Daran ist nichts anrüchiges zu finden.

Sherlock

Zwirbel 6. Apr 2018 07:59

AW: TSocketConnection vs. TIdTCPClient
 
Zitat:

Zitat von Sherlock (Beitrag 1398208)
1) TIdTCPClient ist auch nur eine Drittkomponente, auch wenn sie mitgeliefert wird.
1a) solltest Du die verwenden wollen, kommt etwas/einiges an Umgewöhnung auf Dich zu.
2) TSocketConnection hat laut OH etwas mit DataSnap zu tun und dürfte am Ende auch Indy sein. Dann lieber direkt TIdTCPClient verwenden.
3) Die größte Zeitersparnis dürfte sein, bei den ICS zu bleiben. Daran ist nichts anrüchiges zu finden.
Sherlock

Dann versuche ich es in der Tat doch erst mal mit ICS. Da kann ich auf Code zurück greifen der funktioniert. Danke für die Hinweise.


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