Socket - Problem

Vom Front-End bis SOAP.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Socket - Problem

Beitrag von Jan »

Hallo,

seit einiger Zeit frage ich per Socket Daten bei einer Onlinedatenbank Daten ab. Das hat immer gut geklappt. Aber jetzt schreiben die, das die ab 5. Dezember die Adresse ändern. Die aber jetzt schon aktiv ist, so das ich jetzt schon meine Software rechtzeitig umstellen kann.

Jetzt bekomme ich aber ein Problem: Immer das letzte Zeichen auszulesen dauert eine Ewigkeit. Das dürften so um die fünf Minuten sein. Was natürlich so gar nicht geht. In der alten Version hat das immer problemlos geklappt. Keine Ahnung, was die da geändert haben.

Das Zeichen, das dann nach der Warterei ankommt, ist lt. Chr(cBuffer) = 21. Im Debugger werden aber zwei Zeichen angezeigt - ein ASCII 193 und ein ASCII 192. Was aber natürlich ein Debugger-Anzeigeproblem sein kann.

Ich lese die Daten immer zeichenweise per cBuffer := SocketRecvStr(nSocket, 1, @nError) aus. Kann man dazu irgendwas einstellen, was diese Warterei verhindert? Timout einstellen? Irgendwas anderes?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Socket - Problem

Beitrag von ramses »

Hallo Jan

ich würde mal ein kurzes Testprogramm mit der xbHTTPClient() Klasse aus XB2net schreiben und testen. In der Doku ist ein kurzes Beispiel.

Weil SocketRecStr() ist nicht unbedingt der optimale Weg für eine http-Verbindung /Abfrage.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Socket - Problem

Beitrag von Jan »

Inzwischen habe ich noch ein wenig damit experimentiert. Es bleibt dabei - Socketabfragen auf die neue Adresse bekommen partout kein String-Ende-Signal. Ich hatte das bislang immer bis Chr(0) ausgelesen und dann die Empfangsschleife verlassen. Das klappt aber mit der neuen Adresse nicht mehr, da bekomme ich das halt nicht - anscheinend bekomme ich überhaupt kein klares String-Ende-Signal davon. Ich vermute, daß der daher nochmal auf die SocketRecvStr() geht, da aber halt nichts mehr rein kommt, und der das dann entsprechend lange "abhört". Und irgendwann selber in einenTimeout geht. Von daher wäre es gut, wenn ich die Timeout-Zeit massiv runter setzen könnte. Ich finde nur nichts, wie das gehen könnte.

Ich habe das dann mal alternativ mit LoadFromUrl() versucht. Das hat Alaska ja inzwischen massiv aufgebohrt. Und siehe da - das klappt absolut einwandfrei. Es muß also doch irgend etwas geben das meldet, das der String vollständig übertragen worden ist.

Es gibt aber leider ein großes Aber dabei: So sehr Alaska LoadFromUrl() auch erweitert hat - das kann "nur" GET und POST. Ich brauch aber auch DELETE.

Damit kann ich das Prorgamm jetzt zwar prinzipiell für die neue Adresse freigeben. Aber ein Aufruf klappt nicht sauber - was nicht ganz so wild ist, da kann ich eventuell so gerade eben noch mit leben. Aber ein weiterer Zugriff ist in Planung, und da komme ich dann um ein funktionierendes DELETE nicht drumrum. Ich muß das also auch per Socket zwingend ans Laufen bekommen.

Carlo: xb2.net ist keine Option für mich.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: Socket - Problem

Beitrag von DelUser01 »

Jan hat geschrieben: Do, 23. Nov 2017 18:28xb2.net ist keine Option für mich
warum nicht?
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Socket - Problem

Beitrag von Jan »

Zu teuer für diese eine Anwendung von mir.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Socket - Problem

Beitrag von Werner_Bayern »

Jan hat geschrieben: Do, 23. Nov 2017 18:28 Es gibt aber leider ein großes Aber dabei: So sehr Alaska LoadFromUrl() auch erweitert hat - das kann "nur" GET und POST. Ich brauch aber auch DELETE.

Code: Alles auswählen

cRueck := loadfromurl(cUrl + "articles/" + cBefehl,,,,, "DELETE")
cMethod ist Dein Kandidat!

Mit loadfromurl steuere ich z. B. komplett Shopware über die REST-API.

Zu Deinem Problem mit dem Übertragungsende: Du musst vermutlich eine Ebene tiefer ins Protokoll eintauchen, schau Dir einfach mal einen Mitschnitt mit curl an, manche Server melden z. B. die Länge des Antwortstrings.

Code: Alles auswählen

curl -k --trace-ascii "logfile.txt" ...
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Socket - Problem

Beitrag von Jan »

Hallo Werner,

Aus der Hilfefunktion:
can be set to "GET" or "POST". The default is "GET".
Ich brauch aber halt zusätzlich DELETE.

Ich habe das gerade mal kontrolliert. Nein, die Stringlänge wird nicht übermittelt. Das kann ich also leider nicht ausnutzen.

curl kenne ich zwar, aber hab da keine praktischen Erfahrungen mit, Ich werde das aber mal ausprobieren. Danke für den Hinweis und den Aufruf.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Socket - Problem

Beitrag von ramses »

Hallo Jan

da hast du das Problem wie ich gemeint habe gelöst. SocketRecvStr() ist nicht für http Abfragen geeignet, loadfromurl() hingegen schon.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Socket - Problem

Beitrag von Jan »

Hallo Carlo,

eben nicht. Das Problem ist halt nicht gelöst, weil LoadFromUrl() halt kein DELETE kann.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: Socket - Problem

Beitrag von DelUser01 »

@Jan
Jan hat geschrieben: Do, 23. Nov 2017 21:31weil LoadFromUrl() halt kein DELETE kann
Warum ist es nicht möglich auf das Verzeichnis mit FTP zuzugreifen? Da hast Du mehr Möglichkeiten. Löschen und ähnliches ohne PHP usw. zu realisieren... geht das überhaupt?
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Socket - Problem

Beitrag von Jan »

Roland,

das sind keine Dateien, die ich lade. Ich schicke Requests an den Server, und der liefert mir einen String zurück.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: Socket - Problem

Beitrag von DelUser01 »

OK - was willst Du aber bei so einem Stream mit delete?
Zuletzt geändert von DelUser01 am Fr, 24. Nov 2017 8:52, insgesamt 1-mal geändert.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Socket - Problem

Beitrag von ramses »

Wenn Werner's Tip mit "DELETE" als 6 Parameter nicht geht
Kannst du nicht PUT DELETE in der URL verwenden. Was sagt dir die Doku der API?

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Socket - Problem

Beitrag von Werner_Bayern »

Jan,

probiers aus, bei Shopware funktioniert das. Ich mach damit auch z. B. "PUT".
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Socket - Problem

Beitrag von Jan »

Roland,

Datensätze Löschen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Socket - Problem

Beitrag von Jan »

Carlo,

die ist da eindeutig. Ein PUT gibt es da nirgends. In egal welcher Form.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Socket - Problem

Beitrag von Jan »

Werner,

interessant. Muß ich mal ausprobieren. Es gibt ja viele undokumentierte, aber funktionierende Dinge in den Alaska-Funktionen ....

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: Socket - Problem

Beitrag von DelUser01 »

Jan hat geschrieben: Do, 23. Nov 2017 22:34Datensätze Löschen.
unerwartete Antwort...

Ist ja toll - soll ja tatsächlich gehen - Dateien löschen, aber Datensätze?
Welche WebServer Standard-Software bietet das? Oder nur über Zusatzsoftware?
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Socket - Problem

Beitrag von Werner_Bayern »

DelUser01 hat geschrieben: Do, 23. Nov 2017 23:09 Ist ja toll - soll ja tatsächlich gehen - Dateien löschen, aber Datensätze?
Welche WebServer Standard-Software bietet das? Oder nur über Zusatzsoftware?
Über APIs (meist PHP) mittels Json oder XML z. B.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Socket - Problem

Beitrag von Jan »

Korrekt.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: Socket - Problem

Beitrag von DelUser01 »

Dass das mit PHP usw. geht hatte ich ja schon weiter oben geschrieben.
Ich hatte das so verstanden, dass Jan das mit purem HTTP-Komando machen will.
Das soll es ja auch schon geben (habe ich gelesen) - nur nicht mit welcher WebServerSoftware.

Alles andere ist ja schon alt, sonst würde ja kein WebShop usw. laufen.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Socket - Problem

Beitrag von Jan »

Roland,

ich muß gestehen das ich irritiert bin. Worum geht es eigentlich inzwischen in dieser Diskussion?

Bislang habe ich bei Abfragen an den Anbieter einfach einen Socket geöffnet, und einen XML-String an die betreffende API des Datenbankanbieters geschickt. Und die Rückgabe dann ausgelesen.

Dafür brauche ich kein PHP, keinen Webserver auf meiner Seite, oder sonstwas aufwändiges. Einfach nur grundlegende Xbase++-Funktionen.

Das geht aber mit der neuen Version dieser Datenbank-API nicht mehr, weil ich da einfach kein String-Ende-Flag mehr bekomme. Womit die Socket-Funktion in Wartestellung geht nach dem letzten übermittelten Zeichen, und da ca. 5 Minuten drin verharrt. Bis die sich selber einen Timeout gibt und mich weiterarbeiten läßt.

Ich lasse mir zum Austesten im Entwicklungsmodus mit Xbase++-Standard-Funktionen alle Zeichen wegschreiben um zu sehen, was die Gegenseite denn da so sendet. Es gibt einfach kein String-Ende-Zeichen. Und auch keine Angabe im String, wie lang die Nachricht denn sein wird. Das war weiter oben ja auch ein konstruktiver Vorschlag, den ich sofort ausprobiert hatte.

Ich hatte das dann testweise mal mit LoadFromUrl() getestet. Was auch super läuft. Der hat also irgend einen Mechanismus drin, das der eben nicht in den Timeout geht. Wie und warum auch immer. Der aber zumindest lt. Doku den Nachteil hat, kein DELETE zu können. Lt Werner dürfte das aber doch gehen, das werde ich in den kommenden Tagen mal testen.

Es ist müßig zu diskutieren, warum der Anbieter hier ein DELETE haben möchte. Das ist so, ich kann es nicht ändern. Ich muß einfach damit umgehen können.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Socket - Problem

Beitrag von Werner_Bayern »

Jan,

wenn ich Dir helfen kann, dann melde Dich, gerne auch per PN. Wenns tatsächlich mit loadfromurl nicht funktioniert - was ich mir inzwischen nicht vorstellen kann (mag) - dann mach einen Aufruf mit curl und logfile. Wenn Du mir einen Beispiel-Aufruf nennst, mach ich Dir den curl-Aufruf draus. Im Logfile steht dann alles drin, was hin- und hergeschickt wird.
Vielleicht musst Du mit der neuen API einen speziellen Header setzen?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Socket - Problem

Beitrag von Jan »

Hallo,

nur als Info: Mit dem nächsten Update wird Alaska eine neue HttpClient-Klasse veröffentlichen. Und an LoadFromUrl() wird nicht wehr weiter entwickelt.

Ich lass mich mal überraschen. Wenn die das machen wir sonst dieses jahr, dann sollte das ja ca. kommende Woche raus kommen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten