Ich schreibe einen Delphi-basierten Windows-Server für einen Tablet-basierten HTML-Client.
Die meisten Dateien werden unverarbeitet bereitgestellt, wie es von einem Webserver zu erwarten ist, aber einige spezielle Schlüsselwörter werden als besondere Befehle interpretiert, die mit anderer Software auf dem Server interagieren.
Meistens läuft alles gut. Aber dann, scheinbar zufällig, erhalte ich eine Zugriffsverletzung, und das beim Versuch, einen der GET-Parameter abzurufen.
Das hat mich verrückt gemacht, also habe ich das gesamte Ding in eine Funktion eingekapselt und begonnen, auf die Existenz der TIdHTTPRequestInfo-Daten zu prüfen (hier als öffentliche Eigenschaft Request innerhalb der Klasse dargestellt):
function TELSCommand.GETValue(key:AnsiString):AnsiString;
begin
if not Assigned(Request) then begin
Log.e('WO IST DER REQUEST?');
Result := '';
Exit;
end;
if not Assigned(Request.Params) then begin
Log.e('WO SIND DIE REQUEST PARAMS?');
Result := '';
Exit;
end;
if (Request.Params.IndexOfName(key) >= 0) then
Result := Request.Params.Values[key]
else
Result := '';
Ich hatte eigentlich nicht erwartet, dass einer der beiden Assigned()-Checks ausgelöst wird, aber zufällig wird der zweite ausgelöst, und ich sehe "WO SIND DIE REQUEST PARAMS?" in meiner Protokolldatei, nachdem ich F5 gedrückt habe (langsam, ich hämmere nicht auf den Server).
Wenn ich einen Haltepunkt innerhalb des Blocks setze und den Wert von Request überprüfe, wenn es diesen Punkt erreicht, ist die gesamte TIdHTTPRequestInfo-Struktur mit Standard- und leeren Daten gefüllt. Wenn ich den Browser überprüfe, um zu sehen, welche Anfrage gesendet wurde, ist es das, was ich erwarte... (generell nur eine Anfrage nach "/details?id=222", zum Beispiel).
Ich sollte erwähnen, dass ich unter Windows 7 64-Bit entwickle, daher bin ich ständig paranoid, dass solche Dinge davon verursacht werden. Mehr als einmal bin ich auf Hindernisse gestoßen, die sich als 64-Bit-Kuriositäten herausstellten.
Zusätzliche Informationen: Indy 9, Delphi 2007.
Hoffentlich war das klar genug zu verstehen. Ich suche keine konkreten Antworten, da ich bei weitem nicht genug Informationen bereitgestellt habe; ich suche nur nach Vorschlägen, wohin ich als nächstes gehen soll. Vielen Dank! :)