Seite 1 von 1

Hilfe bei Sockets [Erledigt]

Verfasst: Di, 08. Aug 2017 9:44
von Jan
Hallo,

das hier ist kein normaler Hlfesuch-Diskussions-Thread.

Mein Problem: Ich habe seit ca. 3 Jahren ein Programm-Modul, das Daten mit einer Datenbank in den USA abfragt. Das mach ich per Sockets und HTML/1.1, GET, POST. Das hat immer sauber funktioniert.

Seit ca. 2 Monaten klappt das aber nicht mehr. Ich bekomme immer Server-Fehler, nur das Login selber klappt noch, die Datenabfragen danach nicht mehr. Ich habe das auch mit alten Programmversionen versucht, die eindeutig letztes Jahr noch funktionierten - Fehlanzeige.

Natürlich habe ich den Support für diese Datenbank kontaktiert. Leider haben die Jungs in den USA die Ruhe weg. Erst haben die behauptet, ich hätte in meiner Software die Header für die Requests geändert - was erstens nicht stimmt, und zweitens durch Tests mit alten Versionsständen vom vergangenen Jahr widerlegt ist. Diese Woche kamen die damit um die Ecke, das ich mit alten Standards arbeiten würde. Ich würde HTTP/1.0 senden, statt HTTP/1.1. Blödsinn, natürlich nehm ich 1.1, schon immer. Aber alleine mit diesen Diskussionen waren mal eben mehr als vier Wochen weg. In denen meine Kunden und ich nicht in die Datenbank rein kamen.

Irritierend ist auch, das die eine Sandbox haben. Wo Entwickler sich nach Belieben austoben können mit ihren Tests. Und da komme ich locker rein, alle Abfragen funktionieren einwandfrei. Nur im produktiven System nicht.

Ich will nicht leugnen, das ich eventuell irgendwas falsch mache. Denn ich bin der einzige Entwickler, der diese Probleme hat. Aber eben wie gesagt erst seit ca. 2 Monaten, vorher war ja alles in Ordnung. Ich tippe also darauf, das die intern irgendwas geändert haben, wo ich jetzt gegen die Wand fahre.

Der Gipfel war eine Mail, die ich gestern bekommen habe von denen. Da schreiben die:
Unfortunately, these are some of the issues you run into when you do not utilize industry standard libraries for making the HTTP calls. I would highly recommend that you use libraries to make the HTTP calls to help avoid these types of issues in the future.

Please let us know if there is anything else we can help you with.
Die spinnen doch! Die wollen mir jetzt ans Bein pinkeln, weil ich die Xbase++-Funktionen nutze. Die angeblich nicht Industrie-Standard sind. Die wollen, das ich irgend eine Standard-Bibliothek aus Java, PHP, sonstwas benutze.

Was ich jetzt brauche: Jemanden, der sich mit den Socket-Funktionen aus Xbase++ gut auskennt. Der sich mit den entsprechenden Protokollen gut auskennt. Eventuell mit Whireshark oder anderen Diagnosewerkzeugen arbeiten kann. Der mit mir mal das durchgeht, was ich sende, was erwartet wird, Korrektur-Vorschläge gibt. Da das den Rahmen hier im Forum sprengen würde, gerne bilateral. Auch per Teamviewer, oder wie auch immer. Wenn das zu umfangreich wird, auch notfalls gegen Rechnung.

Es ist übrigens keine Option, z. B. auf xb2.net umzusteigen. Nur um entsprechenden Vorschlägen vorzubeugen.

Jan

Re: Hilfe bei Sockets

Verfasst: Di, 08. Aug 2017 10:36
von brandelh
Hast du nicht mal Alaska gefragt, warum ihre Sachen da nicht richtig arbeiten (laut Aussage der Datenbank Hersteller ;-) ) ...
Wenn einer abschätzen kann woran es liegt, dann doch die ;-)

Re: Hilfe bei Sockets

Verfasst: Di, 08. Aug 2017 10:37
von Martin Altmann
Ich vermute mal eher, dass die jetzt secure sockets nutzen in ihrer Übertragung...

Viele Grüße,
Martin

Re: Hilfe bei Sockets

Verfasst: Di, 08. Aug 2017 10:48
von Jan
Hallo Hubert,

hab ich heute früh schon gemacht. Und ich bin sehr gespannt auf deren Reaktion dazu ... Ob die darüber lachen können, oder einen Tobsuchtsanfall bekommen.

Jan

Re: Hilfe bei Sockets

Verfasst: Di, 08. Aug 2017 10:50
von Jan
Martin,

die Requests laufen auf https://... und bei der Socketerstellung habe ich ein SocketNegotiateSSL() drin stehen. Das auch erfolgreich durchgeführt wird.

Jan

Re: Hilfe bei Sockets

Verfasst: Di, 08. Aug 2017 10:54
von Martin Altmann
Welche Verschlüsselung?
Alaska kann (glaube ich) nicht alle Varianten...

Viele Grüße,
Martin

Re: Hilfe bei Sockets

Verfasst: Di, 08. Aug 2017 11:00
von Martin Altmann
Wenn das SocketNegotiateSSL erfolgreich durchgeführt wird - was genau meinst Du damit?
Einigen sich beide auf eine Verschlüsselung und die ist dann zu schwach bzw. wird nicht akzeptiert?
Oder kommst Du über das Handshaking hinaus und scheiterst danach an einem anderen Problem? Was sagen die debug-Logs? Oder hast Du von dem "Support" deiner Jungs kein entsprechendes Log zur Verfügung gestellt bekommen?

Viele Grüße,
Martin

Re: Hilfe bei Sockets

Verfasst: Di, 08. Aug 2017 11:11
von Jan
Martin,

von deren Support habe ich nichts erfahren außer: Request-Header geändert, alte HTTP-Version benutzt, Nicht-Industrie-Bibliotheken benutzt. Sonst überhaupt gar nichts. Achso, doch, eines schrieben die noch: Unter Laborbedingungen konnten die das gleiche Fehlverhalten feststellen. Ansonsten aber nicht. Was immer die mir damit sagen wollten.

Und wie ich schrieb: Die Autorisierung bekomme ich hin. Also das Anmelden auf der Datenbank mit meinen Zugangsdaten, da bekomme ich ein 200 zurück, also ein OK. Danach sende ich auf dem gleichen Socket weiter, aber bekomme immer deren 500er-Fehler zurück. Die behaupten jetzt, das wäre deren Fehler. Mein Zugriffsversuch mit dem HTTP/1.0 würde von denen falsch interpretiert, das würden die jetzt aber ändern. Wobei mir jetzt überhaupt nicht klar ist, was ich da falsch machen kann. Ich führe explizit den HTTP/1.1 im Request auf. Ansonsten gibt es doch keine in 1.0 erlaubten, in 1.1 aber verbotenen Header-Bestandteile? Mir ist bewußt, das z. B. Connection:keep-alive heute unnütz ist, aber nicht verboten. Oder gibt es doch Header-Bestandteile, die ich definitiv nicht mehr unter 1.1 nutzen darf? Da müsste ich dann mal überprüfen, ob ich die vielleicht einsetze.

Jan

Re: Hilfe bei Sockets

Verfasst: Di, 08. Aug 2017 11:18
von Martin Altmann
Dass es entsprechende Header-Bestandteile gibt ist möglich. Wobei es aber andersherum eher wahrscheinlich ist.
Ob es "deprecated" Headerangaben gibt, müsste man mal googlen...
Schwach, wenn Sie dir nicht mal ein Logausschnitt zur Verfügung stellen können - da hätte ich innerhalb deiner Gemeinschaft ein wenig mehr Unterstützung erwartet.

Viele Grüße,
Martin

Re: Hilfe bei Sockets

Verfasst: Di, 08. Aug 2017 11:20
von Martin Altmann
Vielleicht hilft Dir das ein wenig weiter?

http://www8.org/w8-papers/5c-protocols/key/key.html

Viele Grüße,
Martin

Re: Hilfe bei Sockets

Verfasst: Sa, 12. Aug 2017 21:51
von Jan
Im Laufe unseres XUG-Treffens hat sich das Problem gelöst. Martin hat darauf hingewiesen, das vermutlich einzelne Zeilen im Header gefordert werden würden. Das hat sich dann auch als korrekt herausgestellt - die beiden betreffenden Zeilen hatte ich nur in dem Anmelde-Hedaer drin, die mussten aber auch in die Folge-Header mit rein. Warum das aber ca. 3 Jahre schon ohne gelaufen ist, ist unklar. Aus der Diskussion mit dem Datenbankanbieter lese ich aber heraus, das die intern die Server umgestellt haben von HTTP/1.0 auf HTTP/1.1. Ob das die wirkliche Ursache ist, ist aber vollkommen unklar.

Danke an alle, die sich mit dem Thema beschäftigt und Ratschläge aprat hatten.

Jan

Re: Hilfe bei Sockets [Erledigt]

Verfasst: Mo, 14. Aug 2017 8:38
von brandelh
Hattest du einmal probiert LoadFromUrl() direkt zu nutzen, das ist nämlich die höhersprachige Variante, die im Prinzip den anderen "Standard Bibliotheken" entspricht.
Welche Zeilen hast du eigentlich eingebaut, nur so aus Interesse ...

Re: Hilfe bei Sockets [Erledigt]

Verfasst: Mo, 14. Aug 2017 9:14
von Jan
Hallo Hubert,

ja, LoadFromUrl() hatte ich vergangene Woche auch getestet. Till hatte mich darauf gebracht. Das klappt auch in den meisten Fällen. Aber der kann "nur" GET und POST, ich brauche aber auch z. B. HEAD und DELETE. Was LoadFromUrl() halt nicht kann.

Was ich nach dem XUG-Treffen zusätzlich eingebaut hatte: Die Host-Zeile, die User-Agent-Zeile, und in der Adresszeile die Angabe von HTTP/1.1. Alle drei hatte ich bislang nur im Anmelde-Request drin stehen, und das hatte wie gesagt auch drei Jahre lang funktioniert, und funktioniert auch immer noch auf deren Testsystem. Wenn ich diese drei Angaben jetzt in jeden Request einbaue, klappt das alles sauber im produktiven System.

Till hat mir aber auch geschrieben, das mit dem nächsten Update auch ein Webclient mit in der 2.0 drin sein soll. Das wäre etwas, das ich mir dann genau anschauen würde. Wenn das die Abfragen einfacher, korrekter, stabiler baut, und mehr kann als LoadFromUrl(), wäre das genau die richtige Alternative.

Aber wie gesagt - erstmal ist zumindest dieses Problem hier gelöst. das war für mich schon ein ganz großer Schritt.

Jan

Re: Hilfe bei Sockets [Erledigt]

Verfasst: Mo, 14. Aug 2017 9:19
von brandelh
Ja jeder Request ist für sich selbst zu sehen, die Header müssen immer komplett rein.
Eigentlich stehen die ja in den "Syntaxvorschriften" von HTML - Ich meine RC und dann eine Nummer ...
aber da verging mir damals auch schnell die Lust am Lesen ;-)