Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   EIdSocketError #10053 In Webbroker (https://www.delphipraxis.net/212998-eidsocketerror-10053-webbroker.html)

bcvs 5. Mai 2023 12:51

EIdSocketError #10053 In Webbroker
 
Hallo zusammen,

ich habe hier eine Webbroker-Anwendung, die ich als ISAPI-DLL für den IIS und als Standalone für lokale Tests kompiliere.

Wenn ich die lokale Version im Debugger laufen lasse, bekomme ich ab und zu die Exception
EIdSocketError #10053 Software verursachte einen Verbindungsabbruch.

Die Exception tritt in Indy in dieser Zeile auf:
Delphi-Quellcode:
TIdHTTPResponseInfo.WriteContent;
begin
 ...
      FConnection.IOHandler.WriteLn('<HTML><BODY><B>' + IntToStr(ResponseNo) + ' ' + ResponseText   {Do not Localize}
       + '</B></BODY></HTML>', CharsetToEncoding(CharSet));   {Do not Localize}
 ...
end;
ResponseNo ist dabei immer 200 und ResponseText ist 'OK'


Die Seite wird jedenfalls problemlos aufgebaut und der Webserver läuft auch ganz normal weiter.

Es scheint so, dass die Exception im Indy abgefangen und behandelt wird und der Debugger nur anzeigt, das da etwas war.

Ist das jetzt normal und ein ordnungsgemäßes Verhalten oder muss ich Angst haben, dass da ein größeres Problem dahintersteht?

jaenicke 5. Mai 2023 13:33

AW: EIdSocketError #10053 In Webbroker
 
Das liegt einfach daran, dass in der Zeit des Debuggens keine Kommunikation passiert. Dadurch bricht die Verbindung ab. Das ist dabei normal, solange es nur beim Debuggen auftritt.

bcvs 5. Mai 2023 14:43

AW: EIdSocketError #10053 In Webbroker
 
Wieso findet da keine Kommunikation statt?

Ich habe keinen Haltepunkt gesetzt. Das Programm ist lediglich mit Debugger gestartet.

Soweit ich das sehe, kommt die Exception immer, wenn ein Seitenabruf eigentlich schon abgeschlossen ist.

jaenicke 5. Mai 2023 15:13

AW: EIdSocketError #10053 In Webbroker
 
Zitat:

Zitat von bcvs (Beitrag 1522064)
Ich habe keinen Haltepunkt gesetzt. Das Programm ist lediglich mit Debugger gestartet.

Ach so, dann sollte da kein Unterschied sein. Bist du sicher, dass du die Exception nicht nur in Delphi siehst, sie aber immer auftritt?

bcvs 5. Mai 2023 15:27

AW: EIdSocketError #10053 In Webbroker
 
Ich gehe mal davon aus, dass die Exception immer auftritt.

Ich sehe sie nur, wenn das Programm im Debugger läuft und in den Optionen das "bei Sprach-Exceptions benachrichtigen" eingeschaltet ist.

Ansonsten hat sie keine sichtbaren Auswirkungen.

himitsu 5. Mai 2023 16:22

AW: EIdSocketError #10053 In Webbroker
 
Natürlich wäre es sinnvoll, wenn nicht unnötig viele Exceptions auftreten.
Pervers: in einigen Komponenten/Progammen kamen Leute auf die geniale Idee Exceptions zur Ablaufsteuerung zu benutzen. :freak:

* In Delphi selber kann man leider nur nach Exception-Klasse und dauerhaft das Verhalten anpassen.
Also z.B. dass Delphi bei "dieser" Exception nicht mehr anhält / sie nicht mehr zeigt.

* Es gibt auch Plugins/Extensions, die das besser machen.
Parnassus Parallel Debugger (siehe GetIt) ... dort kann man auch auf den Message-Text filtern.



Schön wäre es auch, wenn man noch sagen könnte "nur für diese Session ignorieren", bzw. "nur im aktuellen Projekt",
aber so ein Feature braucht noch 20 Jahre, bis jemand es schafft das einzubauen.

jaenicke 5. Mai 2023 17:44

AW: EIdSocketError #10053 In Webbroker
 
Zitat:

Zitat von bcvs (Beitrag 1522068)
Ich gehe mal davon aus, dass die Exception immer auftritt.

Vielleicht liegt es am Virenscanner?

Zitat:

Zitat von himitsu (Beitrag 1522071)
Pervers: in einigen Komponenten/Progammen kamen Leute auf die geniale Idee Exceptions zur Ablaufsteuerung zu benutzen. :freak:

Das habe ich auch gemacht, aber nur mit eigenen Exceptions, die man einfach ignorieren kann.

Zitat:

Zitat von himitsu (Beitrag 1522071)
Schön wäre es auch, wenn man noch sagen könnte "nur für diese Session ignorieren", bzw. "nur im aktuellen Projekt",
aber so ein Feature braucht noch 20 Jahre, bis jemand es schafft das einzubauen.

Du solltest einmal GExperts installieren. ;-)

mjustin 5. Mai 2023 18:10

AW: EIdSocketError #10053 In Webbroker
 
Dazu die Antwort von Remy LeBeau:

Zitat:

Do you see the popup only when running in the debugger? Or do you see it when running outside of the debugger? If only inside, then that is normal behavior, since the debugger sees exceptions before the app does. Just dismiss the popup and continue, or tell the debugger to ignore that type of exception.
Daher einfach unter den Sprach-Exceptions hinzufügen (und das Häkchen setzen).

Ursache ist, dass der Client die Verbindung abgebrochen hat z.B. wegen einem Timeout.

https://stackoverflow.com/q/17421138/80901

bcvs 5. Mai 2023 18:20

AW: EIdSocketError #10053 In Webbroker
 
OK, danke.

Dann schalte ich diese Exception im Debugger ab.

Delphi.Narium 5. Mai 2023 18:22

AW: EIdSocketError #10053 In Webbroker
 
Die Fehlermeldung heißt eigentlich nur, dass die Gegenseite die Verbindung abgebrochen hat.

Innerhalb von Indy kannst Du das Problem nicht beheben, da müssten wir mal den Quelltext sehen, der für den Aufruf, die Verbindung, ... zuständig ist, sowas wie
Delphi-Quellcode:
sContent := http.get('www.irgendwas.com');
Was ich (sinngemäß und hier nur hingedaddelt) grundsätzlich mache, um Folgefehler zu reduzieren:
Delphi-Quellcode:
iError := 0;
repeat
  try
    http.Get('ne url',EinStream);
    // Daten verarbeiten ...
    break;
  except
    on e : EIdSocketError do begin
      iError := iError + 1;
      http.Disconnect(True);
      http.IOHandler.InputBuffer.Clear;
      continue;
    end;
    // weitere Fehler abfangen
    // ...
    // und zum Schluss dann noch die "Reste"
    on e : Exception do begin
      iError := iError + 1;
       // sinnvolle Fehlerbehandlung, Fehler ggfls. protokollieren.
       // Fehlerabhängig ggfls. per break aus der Schleife raus,
       // z. B. bei ResponseCode 403 oder 404
       // oder ResponseCodes aus dem 300er-Bereich.
    end;
  end;
  // Aufräumen!!! - ohne dies kann bei einigen Fehler "irgendwas" übrigbleiben,
  // was eine weitere, sinnvolle Arbeit des Programmes unmöglich macht.
  // Die Interna kenn' ich nicht, so dass ich nicht weiß, warum es ohne die
  // zwei Zeilen zuweilen nicht ordentlich weiterläuft.
  http.Disconnect(True);
  http.IOHandler.InputBuffer.Clear;
until (iError > 5);
Im Fehlerfalle behalten ResponseNo und ResponseText (zuweilen, meist, immer?) den Inhalt vom letzten erfolgreichen Aufruf vor dem Fehler, haben hier also genau keine Aussagekraft. Im Zweifel vorher Werte zuweisen, an denen du erkennen kannst: Sind sie unverändert, dann ist das was schiefgelaufen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz