Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Daten von Anwendung 1 nach Anwendung 2 "beamen" (https://www.delphipraxis.net/122334-daten-von-anwendung-1-nach-anwendung-2-beamen.html)

moelski 14. Okt 2008 06:41


Daten von Anwendung 1 nach Anwendung 2 "beamen"
 
Moin !

Wir haben ja eine Anwendung die serielle Daten von Ladegeräten in (Lade- / Entlade-) Kurven umsetzt. Allerdings kommen vermehrt Anfragen über Geräteeinbindungen und mehrere Geräte gleichzeitig abfragen.
Im Prinzip auch eine gute Idee, aber wir wollen unsere Roadmap nicht über den Haufen werfen ...

Nun bietet unsere Anwendung schon seit langem ein recht flexibeles Importformat. Und wenn wir nun dem User die Möglichkeit geben würden, seine Daten selber abzugreifen und ein bisschen "vorkonvertiert" an unsere Anwendung zu senden, dann könnte man damit 90% aller Useranfragen erschlagen.

Nun stellt sich aber folgende Frage: Was ist eine geeignete Methode Daten von einer Anwendung zur anderen zu schaufeln. Das ganze soll aber nicht als Dateiimport passieren wo ein Datenblock eingelesen und verarbeitet wird. Vielmehr sollen die Daten "On the fly" angenommen werden. Will heissen:
Externe Anwendung zeichnet ein Telegramm auf -> Konvertiert die Daten passend für unsere Anwendung -> Sendet sie an unsere Anwendung -> Unsere Anwendung nimmt die Daten an und wertet sie aus. Dann das nächste Telegramm usw. usw.

Kurzum, wir brauchen etwas zur Prozesskommunikation. Die Frage ist nur was ist am sinnvollsten.

Mir fallen so ausm Steh ein paar Methoden ein die man nutzen könnte:
* TCP / IP - über eine Socketverbindung (wäre sicher sehr universell einsetzbar)
* Pipes
* Filewatcher (Datei zum Datenaustausch benutzen)

Wichtig wäre nur, das die Fremdanwendung nicht auf Delphi beschränkt ist. Denn wenn ein User sich sein eigenes Proggi schreiben will kann man nciht davoin ausgehen das er Delphi kann ...

Könnt ihr mir ein paar Tips geben was man für diese Aufgabe am sinnvollsten nehmen kann?

alzaimar 14. Okt 2008 06:49

Re: Daten von Anwendung 1 nach Anwendung 2 "beamen"
 
Lokal ginge das am Einfachsten/Schnellsten mit WM_COPYDATA.
Über PC-Grenzen hinweg würde ich jedoch zu einem Webservice tendieren. COM ginge auch, aber das wird bei DCOM zu einer Verzweiflungstat.

moelski 14. Okt 2008 07:12

Re: Daten von Anwendung 1 nach Anwendung 2 "beamen"
 
Moin !

Zitat:

WM_COPYDATA
Sehr guter Hinweis. Habe schon Beispiele zu allen möglichen Programmiersprachen gefunden. Ich werde das mal testen.

Zitat:

Über PC-Grenzen hinweg würde ich jedoch zu einem Webservice tendieren
Hast du da evtl. einen Ansatz für mich? Einen Webservice habe ich in Delphi noch nicht genutzt.

mjustin 14. Okt 2008 07:34

Re: Daten von Anwendung 1 nach Anwendung 2 "beamen"
 
Zitat:

Zitat von moelski
Externe Anwendung zeichnet ein Telegramm auf -> Konvertiert die Daten passend für unsere Anwendung -> Sendet sie an unsere Anwendung -> Unsere Anwendung nimmt die Daten an und wertet sie aus. Dann das nächste Telegramm usw. usw.
...
Wichtig wäre nur, das die Fremdanwendung nicht auf Delphi beschränkt ist. Denn wenn ein User sich sein eigenes Proggi schreiben will kann man nciht davoin ausgehen das er Delphi kann ...

Hi

Wenn man Daten zwischen mehreren Rechnern von Anwendungen in mehreren Programmiersparachen senden will, ist zum Beispiel eine Message Queue wie der Open Source ActiveMQ eine Lösung.

Die Fremdanwendungen senden an eine Queue, die der Message Broker automatisch auch persistent (in einer Datenbank) speichern kann. Eure Anwendung entnimmt die Daten der Reihe nach aus der Queue und verarbeitet sie. Ein Vorteil ist, dass eure Anwendung auch mal ausfallen darf, und die Clients dennoch Daten senden können. Ein weiterer Vorteil ist, dass man die Anwendung in der die Daten abgerufen werden auch mehrfach auf verschiedenen Rechnern starten kann, um die Last auf mehr Hardware zu verteilen - die Message Queue wird die Nachricht dabei immer nur an eine Instanz senden.

Daß ActiveMQ auch Transaktionen unterstützt, für viele Programmiersprachen Clientbibiotheken existieren, und auch sehr einfach in Betrieb zu nehmen ist (auspacken, Batch starten, benutzen), ist vielleicht noch erwähnenswert. Und mit IONA gibt es auch eine kommerziell supportete Version, falls Open Source nur mit Support in Frage kommt.

Neben ActiveMQ gibt es noch andere Produkte wie z.B. xmlBlaster (ebenefalls Open Source, wird z.B. von Astra eingesetzt). Eine Zero-Install-Lösung gibt es auch, Amazon bietet mit dem "Simple Queue Service" eine global erreichbare Message Queue an, mit der sich Clients über das Internet verbinden.

Viele Grüße
Michael


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