AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls D11: SOAP (HttpClient.Win, SendData) liefert 12152 Fehler beim Senden der Daten: Der
Thema durchsuchen
Ansicht
Themen-Optionen

D11: SOAP (HttpClient.Win, SendData) liefert 12152 Fehler beim Senden der Daten: Der

Ein Thema von looseleaf · begonnen am 21. Jul 2023 · letzter Beitrag vom 27. Jul 2023
Antwort Antwort
looseleaf

Registriert seit: 25. Mai 2011
69 Beiträge
 
#1

D11: SOAP (HttpClient.Win, SendData) liefert 12152 Fehler beim Senden der Daten: Der

  Alt 21. Jul 2023, 10:15
Liebe Gemeinde!

Wir verwenden SOAP Requests in unserem Programm, dei auch grundsätzlich funktionieren. Aber einer, bei dem auch ein Attachment dran ist, das etwas größer ist, macht uns Sorgen. Hier steigt Delphi in System.Net.HttpClient.Win an der Stelle aus, wo die Daten an den Server geschickt werden. Nach etwa 100kB Daten (von ertwa 400kB) ist es mit
"Fehler beim Senden der Daten: (12152) Der Server lieferte eine ungültige oder unbekannte Rückmeldung"
vorbei.

Ich habe gesehen, dass die Implementierung dieser Komponenten im Vergleich zu Delphi 10.2 komplett überarbeitet wurde.

Pervers ist, dass es funktioniert, wenn ein Haltepunkt an der Stelle, wo ein

// Send Request
if not WinHttpSendRequest(LRequest.FWRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, LDataLength, 0) then
Exit(HandleExecuteError(@SNetHttpClientSendError, ARequest));

gemacht wir und ich dort so in etwa 5 Sekunden warte.

Es gibt keine parallelen Requests, die hier aus irgendwelchen Threads dazwischenfunken könnten.

Ich bin schon wieder mal ratlos. Ich könnte natürlich den kompletten System.Net.HttpClient.* Code aus Delphi 10.2 verwenden...ODer zumindest die DoExecuteRequest Methode. Aber gefallen tut mir das nicht :/

Stefan

Stefan
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: D11: SOAP (HttpClient.Win, SendData) liefert 12152 Fehler beim Senden der Daten:

  Alt 21. Jul 2023, 15:09
Hast du die Timeouts schon angepasst?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
looseleaf

Registriert seit: 25. Mai 2011
69 Beiträge
 
#3

AW: D11: SOAP (HttpClient.Win, SendData) liefert 12152 Fehler beim Senden der Daten:

  Alt 24. Jul 2023, 10:12
Hast du die Timeouts schon angepasst?
Die setzen wir am RIO.Objekt programmtechnisch seit jeher auf 300*1000 also 5 Minuten.

Außerdem wäre es umgekehrt zu erwarten: Wenn ich länger warte, steigt das Framework aus. Aber es ist ja so, dass es aussteigt, wenn ich *nicht* mit einem Haltepunkt warte. :/
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: D11: SOAP (HttpClient.Win, SendData) liefert 12152 Fehler beim Senden der Daten:

  Alt 24. Jul 2023, 10:42
Das Senden und Empfangen wird öfters in einem anderen Thread erledigt.
Somit kann es auch ein Synchonisierungs-/Paralleliserungsproblemchen sein ... multithreaded auf etwas, was ihr z.B. vorzeitig wieder freigebt/überschreibt.
$2B or not $2B
  Mit Zitat antworten Zitat
looseleaf

Registriert seit: 25. Mai 2011
69 Beiträge
 
#5

AW: D11: SOAP (HttpClient.Win, SendData) liefert 12152 Fehler beim Senden der Daten:

  Alt 24. Jul 2023, 11:37
Das Senden und Empfangen wird öfters in einem anderen Thread erledigt.
Somit kann es auch ein Synchonisierungs-/Paralleliserungsproblemchen sein ... multithreaded auf etwas, was ihr z.B. vorzeitig wieder freigebt/überschreibt.
Hm, wir haben eine zweite, komplett getrennte RESTRequest-Komponente in einem anderen Form, die über einen Thread Anfragen schickt.

Ich habe den Thread einmal komplett deaktiviert, er tut nichts mehr. Kein Effekt.

Was mir aber auffällt: Wir haben auch noch 2 andere Requests vor dem eigentlichen "bösen", bei dem wir das Backend abfragen, ob die Funktion momentan überhaupt ausgeführt werden darf. Hier sind keine Threads im Spiel, sondern die Abfragen passieren hintereinander. Lasse ich beide weg, funktioniert der "böse" Request. Jetzt wird's spannend.
  Mit Zitat antworten Zitat
looseleaf

Registriert seit: 25. Mai 2011
69 Beiträge
 
#6

AW: D11: SOAP (HttpClient.Win, SendData) liefert 12152 Fehler beim Senden der Daten:

  Alt 25. Jul 2023, 16:44
Weitere Information: Ich habe ein Wireshar-Protokoll gemacht. Da es sich um einen HTTPS-Strom handelt, sehe ich leider nicht viel. Was ich aber sehe, ist dass wir mittem im Strom ein FIN, ACK an den Server schicken, der das dann etwas später mit einem RST,ACK quittiert und den Port schließt.

Bleibt also die Frage: Wer schickt mir ein FIN, ACK und warum.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: D11: SOAP (HttpClient.Win, SendData) liefert 12152 Fehler beim Senden der Daten:

  Alt 25. Jul 2023, 18:03
Wenn du diesen Netzwerkverkehr im Sysinternals ProcessMonitor siehst,
dann kannst du dort eventuell auch den Stacktrace zu dieser Aktion dir anzeigen lassen.
$2B or not $2B
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: D11: SOAP (HttpClient.Win, SendData) liefert 12152 Fehler beim Senden der Daten:

  Alt 26. Jul 2023, 11:56
Weitere Information: Ich habe ein Wireshar-Protokoll gemacht. Da es sich um einen HTTPS-Strom handelt, sehe ich leider nicht viel. Was ich aber sehe, ist dass wir mittem im Strom ein FIN, ACK an den Server schicken, der das dann etwas später mit einem RST,ACK quittiert und den Port schließt.
Bleibt also die Frage: Wer schickt mir ein FIN, ACK und warum.
Wenn Du Zugriff auf die keys hast, die kannst Du in Wireshark einlesen und so dann auch den Traffic dekodieren.

Was eventuell noch hilfreich sein kann Fiddler Classis

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
looseleaf

Registriert seit: 25. Mai 2011
69 Beiträge
 
#9

AW: D11: SOAP (HttpClient.Win, SendData) liefert 12152 Fehler beim Senden der Daten:

  Alt 27. Jul 2023, 15:18
Das Problem im konkreten Fall scheint gewesen zu sein, dass die Keep-Alive-Pakete das ganze umbringen.

Ich habe mir System.Net.HttpClient.Win.pas in mein Projekt geholt und dort bei den anderen WinHttpSetOption() Aufrufen noch

LOptionValue := WINHTTP_DISABLE_KEEP_ALIVE;
WinHttpSetOption(LRequest.FWRequest, WINHTTP_OPTION_DISABLE_FEATURE, @LOptionValue, sizeof(LOptionValue));

ergänzt. Jetzt funktinoiert es.

Interessant ist, dass im Delphi 10.2 Code das KEEP_ALIVE Flag auch nicht explizit deaktiviert ist, es aber offenbar funktioniert.

Danke für euer Feedback!

Stefan
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:36 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