AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein HTTPS Post an Server in einer Queue senden

HTTPS Post an Server in einer Queue senden

Ein Thema von linxxruxx · begonnen am 20. Sep 2019 · letzter Beitrag vom 23. Sep 2019
Antwort Antwort
linxxruxx

Registriert seit: 19. Aug 2019
28 Beiträge
 
#1

AW: HTTPS Post an Server in einer Queue senden

  Alt 20. Sep 2019, 10:41
Die Aufträge werden im Backend erstellt und an meine SQL-Lite Datenbank geschickt und rein geschrieben. Ich hole mir in Delphi lediglich die bereits vom Backend befüllte Tabelle "Auftrag".

Ich habe eine DBHelperUnit geschrieben. Darin sind alle Queries hinterlegt, welche ich in Delphi nutze.
Darin gibt es dann verschiedene Queries für die Aufträge, die ich aus der Datenbank lade, um sie in der App anzuzeigen oder zu bearbeiten (CreateAuftrag, LadeAuftrag, UpdateAuftragStatus zb.)

Wird in der App dann etwas geändert, werden die Änderungen z.B über die "UpdateAuftragStatus"-Query wieder zurück in die eigentliche Datenbanktabelle "Auftrag" geschrieben.
Parallel werden die Änderungen dann aber auch in die Datenbanktabelle "AuftragCache"geschrieben.
Diese Tabelle ist quasi eine Kopie-Tabelle der eigentlichen Tabelle "Auftrag", nur dass sie am Anfang leer ist und erst befüllt wird, wenn Änderungen kommen.

Aus dieser "AuftragCache" sollen dann die Daten auch noch an das Backend geschickt werden (Ist eine Webanwendung).
Im Backend wird der Auftrag dann über die ID gesucht und geupdated mit einem Zeitstempel.


Eine Schnittstelle gibt es schon an das Backend. Jap ich kann diese über http nutzen.
--> Über Indy und idHttp etc hab ich schon viel gelesen, nur weiß ich nicht wie ich das schreiben kann, wenn ich einen kompletten Datenbank-Eintrag versenden will.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: HTTPS Post an Server in einer Queue senden

  Alt 20. Sep 2019, 11:01
Was du machen willst ist mir absolut klar, aber das wird nicht einfach so gehen. Das Backend muss mit deinen Daten zurecht kommen.

Wie du das senden musst, bestimmt das Backend. Du musst dann nur noch die URL wissen und die die vom Backend benötigten Parameter, entsprechend übergeben (via HTTP POST oder GET).

Ich vermute mal, dass das was du da genau machen willst, so nicht direkt gehen wird. Ich bezweifle dass das Backend genau dafür eine Funktion hat. Wenn es im Backend über HTTP eine Schnittstelle gibt, um Auftrage einzulesen, müsstest du deine lokalen DB-Daten in das geforderte Format bringen (ev. JSON, XML oder halt per HTTP POST/GET Parameter) und diese dann an den HTTP-Server senden.
  Mit Zitat antworten Zitat
linxxruxx

Registriert seit: 19. Aug 2019
28 Beiträge
 
#3

AW: HTTPS Post an Server in einer Queue senden

  Alt 20. Sep 2019, 11:05
Okay, ja das werde ich auf jedenfall mit einem Kollegen abklären, wie das Backend die Daten erwartet.

Ist das mit der Queue denn umsetzbar? Das bedeutet: so lange in der Queue bleiben, bis Kontakt zum Server besteht?
Ich weiß absolut nicht wie ich das angehen kann, würde wenigstens schon mal den Kopf dafür basteln und dann den Inhalt (was ich sende) noch abklären.

Danke für die Antworten.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: HTTPS Post an Server in einer Queue senden

  Alt 20. Sep 2019, 11:20
Weiss nicht genau was du hier mit "Queue" meinst. Wenn es deine Tabelle ist die du mit "while not eof" durcharbeiten willst, dann geht das auf jeden Fall.

Dir Frage ist dann halt, ob das Backend nur einzelne Aufträge verarbeiten kann oder ob es eventuell alle Aufträge in Form einer JSON/XML Datei verarbeiten kann. Muss jeder Auftrag aleine verarbeitet werden, musst du halt für jeden Auftrag die Daten an das Backend senden. Pro Auftrag also einen Webaufruf. Wenn er mehrere Aufträge mit einer JSON/XML Datei einlesen kann, reicht ein einzelner Aufruf mit der von dir zuerst zusammen gestellen JSON/XML Datei mit allen Aufträgen deiner Queue.
  Mit Zitat antworten Zitat
linxxruxx

Registriert seit: 19. Aug 2019
28 Beiträge
 
#5

AW: HTTPS Post an Server in einer Queue senden

  Alt 20. Sep 2019, 11:30
Es soll in der "while" quasi geprüft werden, ob die Variable "SentToServer" false ist, denn nur dann wurde der Eintrag noch nicht an das Backend gesendet.
Danach soll geprüft werden ob Verbindung zum Server besteht, wenn das nicht der Fall ist, soll der Eintrag solange in einer Warteschleife bleiben, bis Serververbindung besteht.
Besteht die Verbindung, wird der Eintrag gesendet und im Anschluss die Variable "SentToServer" auf true gesetzt.
Die While-Schleife ist durch und es geht mit dem nächsten Eintrag weiter.

Und das soll ich iwie in einer Queue machen, aber das weiß ich eben nicht so recht.

Jeder Auftrag muss alleine verarbeitet werden, da es ja Änderungen am Auftrag sind.
Man kann es sich so wie Events vorstellen: AuftragStauts = "Angenommen" wäre dann ein Event. Wird er aber während keine Verbindung zum Server besteht auch noch "Erledigt", wäre das ein nächstes Event.

Aus diesem Grund hat die Tabelle Auftrag/AuftragCache auch einen Zeitstempel, damit mit dem ersten, also ältesten Eintrag/Event begonnen wird, in das Backend zu schreiben.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: HTTPS Post an Server in einer Queue senden

  Alt 20. Sep 2019, 12:04
Jeder Auftrag muss alleine verarbeitet werden, da es ja Änderungen am Auftrag sind.
Man kann es sich so wie Events vorstellen: AuftragStauts = "Angenommen" wäre dann ein Event. Wird er aber während keine Verbindung zum Server besteht auch noch "Erledigt", wäre das ein nächstes Event.
Wie das Ganze verarbeitet wird ist eigentlich egal. Das müsste ja dann das Backend machen. Ob du da alle Queue Aufträge mittels XML oder nur einzlene senden kannst, bestimmt das Backend und nicht du im Client. Die Verarbeitung passiert ja dann auch im Backend und wie das da gemacht wird, muss dich nicht intressieren. Du musst ihm nur die Daten so anliefern wie er sie erwartet.

In deinem Fall wäre es aber schon einfacher, wenn das Backend nur einzelne Aufträge verarbeitet, da du so pro Webaufruf auch gleich die eindeutige Antwort bekommen kannst, ob die Verarbeitung geklappt hat. Diese Info wirst du vom Webserver als Antwort auf deine Webanfrage zurück bekommen. Aber auch im anderen Fall müsstest du dann halt vom Server eine XML Datei mit allen Infos zur Verarbeitung retour bekommen. Darin würden dann die Auftragsnummer und das Resultat der Verarbietung drin stehen. Diese würdest du dann auswerten und deine lokale DB entsprechend aktualisieren.

Mal noch eine andere Frage die mir nicht ganz klar ist: Wie bekommst du die Aufträge vom Backend? Hast du da eine DB-Verbindung zum Backend (per TCP) und wenn ja, wieso muss das dann per Umweg über HTTP passieren?

Geändert von Rolf Frei (20. Sep 2019 um 12:06 Uhr)
  Mit Zitat antworten Zitat
linxxruxx

Registriert seit: 19. Aug 2019
28 Beiträge
 
#7

AW: HTTPS Post an Server in einer Queue senden

  Alt 23. Sep 2019, 07:15
Mal noch eine andere Frage die mir nicht ganz klar ist: Wie bekommst du die Aufträge vom Backend? Hast du da eine DB-Verbindung zum Backend (per TCP) und wenn ja, wieso muss das dann per Umweg über HTTP passieren?
Derzeit besteht noch garkeine Verbindung zum Backend. Habe meine SQL-Lite Datenbank in Delphi selbst befüllt und spiele mit diesen Daten rum.
Aus diesem Grund ist ganz klar, dass das alles noch geklärt werden muss in welchem Format die Daten geliefert werden müssen.
Mir geht es ja eigentlich um die Queue, dass ich absolut nicht weiß, wie ich solch eine schreiben soll.
Welche Daten in welchem Format dann letztendlich geschickt werden, kann ich momentan dann noch ein wenig ignorieren.
Ich hätte einfach nur super gern schon einmal das Gerüst gebaut.
Dh. In der While: Auftrag bleibt so lange in der Queue bis Verbindung zum Server besteht und eine positive Antwort vom Server für den Auftrag zurück kommt.

Wie könnte so eine Queue denn ca aussehen? Also prüfen ob Kontakt zum Server ist und auf die Antwort (SentToServer = True) warten?
Das Backend verarbeitet somit jeden Auftrag einzeln, da jeder Auftrag auch so lange in der Queue sein soll, bis eine positive Antwort zurück kommt, danach erst der nächste. Oder?
  Mit Zitat antworten Zitat
Alt 21. Sep 2019, 09:22     Erstellt von kenstober88
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz