AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi SOAP: XE3-Client liefert Daten, XE8-Client liefert Fehler
Thema durchsuchen
Ansicht
Themen-Optionen

SOAP: XE3-Client liefert Daten, XE8-Client liefert Fehler

Ein Thema von kretabiker · begonnen am 24. Jun 2015 · letzter Beitrag vom 10. Jul 2015
 
kretabiker

Registriert seit: 10. Mär 2005
Ort: Bargteheide
183 Beiträge
 
Delphi 12 Athens
 
#17

AW: SOAP: XE3-Client liefert Daten, XE8-Client liefert Fehler

  Alt 9. Jul 2015, 16:19
So, vorläufige Abschlussmeldung zu diesem Thema: Nach ausführlichen Tests mit PAServer konnte ich das Problem auf einen Aufruf der WinInet-Funktion HttpSendRequest (bzw. auf eine Fehlerprüfung im Umfeld davon) in der Unit SOAP.SOAPHTTPTrans.pas einkreisen. Dieser Aufruf erfolgt in XE8 nach dem Muster

Delphi-Quellcode:
{$IFDEF UNICODE}
          HttpSendRequest(Request, nil, 0,
                          DatStr.Bytes, DatStr.Size);
{$ELSE}
          HttpSendRequest(Request, nil, 0,
                          @DatStr.DataString[1],
                          Length(DatStr.DataString));
{$ENDIF}
          
          RetVal := HandleWinInetError(GetLastError, Request, True);
d.h. der Aufruf der Funktion HandleWinInetError erfolgt immer unabhängig vom Ergebnis der HttpSendRequest-Funktion, welche entweder True oder False liefern kann.

In XE3 sieht das noch ein wenig anders aus:

Delphi-Quellcode:
{$IFDEF UNICODE}
          WinInetResult := HttpSendRequest(Request, nil, 0,
                          DatStr.Bytes, DatStr.Size);
{$ELSE}
          WinInetResult := HttpSendRequest(Request, nil, 0,
                          @DatStr.DataString[1],
                          Length(DatStr.DataString));
{$ENDIF}
          if not WinInetResult then
            RetVal := HandleWinInetErrorEx(GetLastError, Request, True);
Hier erfolgt der Aufruf von HandleWinInetError nur, wenn das Ergebnis von HttpSendRequest False ist, was meines Erachtens richtig ist.

Ändere ich den Sourcecode in XE8 so, dass der Aufruf an dieser Stelle wie bei XE3 erfolgt, funktioniert die Webservice-Abfrage auch unter W2k3R2 einwandfrei; es war wohl reine Glücks- bzw. Pechsache, dass es auf meinem Entwicklungsrechner und unter Win7 funktioniert, nicht jedoch auf W2k3R2-Maschinen, woher dort der Errorcode 2 auch immer kommt. Ich denke, das ist ein Bug in XE8, jedenfalls habe ich das so an den Embarcadero-Support gemeldet. Wer es gerne in seinem eigenen Source mal nachschauen möchte: Soap.SOAPHttpTrans.pas, class THTTPReqRes, function Send, Zeile 1156ff. Der (meines Erachtens) fehlerhafte Aufruf von HandleWinInetError erfolgt aber noch an zwei weiteren Stellen innerhalb der Unit.

Wenn sich der Emba-Support meldet, gibt es noch ne abschließende Abschlußmeldung.
Udo Treichel
  Mit Zitat antworten Zitat
 


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 22:28 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