![]() |
Problem mit MSXML Httprequest.send
Das ist eine Legacy-Anwendung mit Delphi 2006. Sie greift auf die MS Azure Translator API zu. Das hat seit gut 1 Jahr problemlos funktioniert + jetzt nicht mehr.
Es geht um diesen Code:
Code:
Open wird ein Token angefordert, der ist immer 10 Minuten gültig. Das funktioniert. Unten wird mit dem Token eine Abfrage-URL erzeugt. Das OPEN funktioniert. Beim SEND wird eine Exception geworfen mit "'Systemfehler: -2146697208'". Das SEND ist eine Methode aus der MSXML.
var
XMLHTTPRequest: IXMLHTTPRequest; XMLDOMDocument: IXMLDOMDocument; begin try XMLHTTPRequest := CreateOleObject('MSXML2.XMLHTTP') as IXMLHTTPRequest; if (sActiveToken = '') or (Now - dtTokenDate >= n10min) then begin dtTokenDate := Now; XMLHTTPRequest.Open('POST', URIToken, False, '', ''); XMLHTTPRequest.setRequestHeader('Ocp-Apim-Subscription-Key', SubscriptionKey); XMLHTTPRequest.send(''); if (XMLHTTPRequest.readyState = COMPLETED) and (XMLHTTPRequest.status = OK) then begin sActiveToken := XMLHTTPRequest.responseText; end else begin sActiveToken := ''; end; end; Uri := UriTranslate + '?appid=Bearer%20' + sActiveToken + '&text=' + sText + '&from=' + sFrom + '&to=' + sTo; XMLHTTPRequest.Open('GET', URI, False, '', ''); XMLHTTPRequest.send(''); Hat jemand eine Ahnung, was da schief gehen könnte? Danke für Eure Tipps! |
AW: Problem mit MSXML Httprequest.send
Ergänzung: Das ist sowohl auf meiner Entwicklungsmaschine so (XP) , als auch beim Kunden (Win 10).
Und eben auf einem Win 8 Rechner getestet, da funktioniert das. Muss wohl was mit der MSXML.DLL zu tun haben. |
AW: Problem mit MSXML Httprequest.send
Code:
Die Registry sagt dazu: msxml3.dll. Auf dem Entwicklungsrechner v3 SP10 (da geht es nicht).
CLASS_XMLHTTPRequest: TGUID = '{ED8C108E-4349-11D2-91A4-00C04F7969E8}';
... class function CoXMLHTTPRequest.Create: IXMLHttpRequest; begin Result := CreateComObject(CLASS_XMLHTTPRequest) as IXMLHttpRequest; end; Auf dem Testrechner v3 SP11 (da geht es). Mal sehen, ob es für die v3 ein SP 11 zum downloaden gibt. Aber die Frage ist: Warum funktioniert das auf meinem Entwicklungsrechner nicht mehr? |
AW: Problem mit MSXML Httprequest.send
Das liegt wohl wirklich an der Version. Hmm - weiß jemand, wie man die MSXML3.dll updaten kann?
|
AW: Problem mit MSXML Httprequest.send
Nur ein Versuch:
XMLHTTPRequest.send(''); mit XMLHTTPRequest.send(); ersetzen. Was passiert? |
AW: Problem mit MSXML Httprequest.send
Zitat:
![]() |
AW: Problem mit MSXML Httprequest.send
@KodeZwerg:
Das geht so nicht, weil: procedure send(varBody: OleVariant); safecall; Aber auch der Aufruf mit NULL als Parameter statt '' ändert nichts. Trotzdem danke. @mkinzler: Danke für den Link. MSXML3.DLL SP11 kommt da leider gar nicht vor + die weiterführenden Links landen im Nirwana. Leider ist die Fehlermeldung 'Systemfehler: -2146697208' auch nicht recht hilfreich. |
AW: Problem mit MSXML Httprequest.send
Besagte MSXML3.DLL, gleicher Sytemfehler, aber vollkommen andere Ursache:
![]() ![]() ![]() Grobes Fazit: Der Server ist nicht erreichbar. |
AW: Problem mit MSXML Httprequest.send
Gerade wegen dieser Zahl vermute ich dass das
Delphi-Quellcode:
der Fehler ist, eventuel liegts ja auch an der Unit wo das "varBody: OleVariant" vorkommt (das die jetzige dll den typ nicht versteht)
''
Schau Dir mal den Export der DLL, da müsstest du den korrekten Aufruf entdecken können. |
AW: Problem mit MSXML Httprequest.send
Wenn das '' der Fehler ist, müsste es aber überall so sein und nicht nur bei einigen Rechnern.
|
AW: Problem mit MSXML Httprequest.send
Der Server ist es sicher nicht, denn auf manchen Rechnern klappt es (auch zur gleichen Zeit). Außerdem klappt ja das erste .send für die Authentifizierung. Erst das zweite .send schlägt fehl.
|
AW: Problem mit MSXML Httprequest.send
Das der Server erreichbar ist, bedeutet nicht zwingend, dass auch eine stabile Verbindung aufgebaut werden kann.
Momentan arbeite ich an einem Programm, dass die Ausgabe bestimmter Server auf Korrektheit (inhaltlich und technisch) prüfen soll. Die Server sind prinzipiell verfügbar (Ping funktioniert immer). Trotzdem erhalte ich sporadisch diverse Fehlermeldungen, die da wären:
Code:
Ab und an auch mal SSL-Fehler.
400 Bad Request
500 Internal Server Error 502 Bad Gateway 502 Server Hangup 504 Gateway Timeout Allen Fehlern ist gemein, dass eine erneute, identische Abfrage (früher oder später (Sekunden, immer unter einer Minute)) zum erwartete, korrekten Ergebnis führen. Wo es hier genau "klemmt" konnte noch nicht herausgefunden werden. Kann mich daran erinnern, dass wir mal in einem großen Netz Probleme mit der Verbindung zu 'ner Oracle-Datenbank hatten. Diese Probleme traten aber nur auf einigen Rechnern und sporadisch auf. Die Datenbank war immer einwandfrei verfügbar. Irgendwann hat jemand herausgefunden, dass u. a. der Virenscanner da irgendwie "zwischenfunkte" (nach Update und Umkonfiguration wurde es besser). Bei einigen Rechnern blieb das Problem aber bestehen: Hier konnte festgestellt werden, dass sie alle, von der Datenbank aus gesehen, hinter einem Switch hingen, der zwar (noch) arbeitete, aber nicht immer so ganz korrekt. Nach dem Austausch dieses Gerätes war das Problem dann behoben. Es gibt da halt viele Möglichkeiten als Ursache für eine fehlerhafte Kommunikation zwischen Client und Server. Die Software kann eine davon sein, muss aber nicht zwingend die einzige Ursache sein. Schwierig wird die Ursachenforschung, wenn man unterschiedliche System hat, die über unterschiedliche Verbindungen kommunizieren und dabei auch noch unterschiedliche Softwarestände haben, das kann dann schonmal viele Nerven kosten. Hast Du die Möglichkeit in die jeweiligen Serverlogs zu schauen, um zu prüfen, ob dort die Anfragen Deiner Software korrekt ankommen und der Server auch darauf antwortet? Erstmal 'ne blöde Idee: Die beiden Anfragen könnte man ja auch (zum Test) mit den Indykomponenten (oder ICS oder was auch immer zur Verfügung steht) machen. Funktioniert das und sind die Ergebnisse korrekt? Dann wäre der Fehler eindeutig im Umfeld der MSXML3.DLL zu suchen. |
AW: Problem mit MSXML Httprequest.send
Ich hab ein Testprogramm + da werden mehrere Anfragen abgesetzt + es ist so, wie ich es beschrieben habe: Entweder klappt es auf einem Rechner oder es klappt nicht. Reproduzierbar.
Ich hab mit Internetprotokollen + Indy keine Erfahrung, aber wahrscheinlich wäre es eine Option, das zu versuchen. Danke für die Tipps jedenfalls. |
AW: Problem mit MSXML Httprequest.send
Hmmm, wenn ein .send anscheinend klappt und ein weiterer nicht, würde ich mir die nicht funktionierende dll mal genauer durchtesten indem ich: alle befehle die .send verarbeiten soll abschalte und nach und nach zuschalte.
So sollte man auch in der Lage sein das nun defekte element herauszufinden, oder denke ich da gerade falsch? Sorry! |
AW: Problem mit MSXML Httprequest.send
Wie gesagt, auf manchen Rechnern funktioniert es. Außerdem handelt es sich da ja um die MSXML3.DLL von Microsoft + nicht um eine selbst entwickelte, also debuggen ist da schwer.
Die DLL einfach durch eine funktionierende zu ersetzen, geht auch nicht so einfach, weil die Aufrufe über TypeLibs und ProgIDs gemappt werden + in der Registry an 100 Stellen vorkommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 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