タブレット ベースの HTML クライアント用の Delphi ベースの Windows サーバーを作成しています。
Web サーバーに期待されるように、ほとんどのファイルは未処理で提供されますが、少数の特別なキーワードは、サーバー上の他のソフトウェアとやり取りする特別なコマンドとして解釈されます。
ほとんどの場合、すべて問題ありません。しかし、その後、一見ランダムにアクセス違反が発生し、GET パラメータの 1 つを取得しようとしているときに発生します。
これは私を怒らせたので、すべてを関数にカプセル化し、TIdHTTPRequestInfoデータ (ここではクラス内のパブリック プロパティRequestとして示されています) の存在をテストし始めました。
function TELSCommand.GETValue(key:AnsiString):AnsiString;
begin
if not Assigned(Request) then begin
Log.e('WHERE IS REQUEST?');
Result := '';
Exit;
end;
if not Assigned(Request.Params) then begin
Log.e('WHERE IS REQUEST PARAMS?');
Result := '';
Exit;
end;
if (Request.Params.IndexOfName(key) >= 0) then
Result := Request.Params.Values[key]
else
Result := '';
end;
2 つの Assigned() チェックのいずれかがトリガーされるとは実際には予想していませんでしたが、ランダムに 2 番目のチェックがトリガーされ、「WHERE IS REQUEST PARAMS?」と表示されます。F5 キーを押した後、ログ ファイルに記録されます (ゆっくりとサーバーを叩いているわけではありません)。
ブロック内にブレークポイントを設定し、そのポイントに達したときに Request の値を調べると、TIdHTTPRequestInfo 構造全体がデフォルトの空のデータで満たされます。ブラウザをチェックして、送信されたリクエストを確認すると、それは私が期待するものです...(通常、「/details?id=222」のリクエストのみ)。
私は Windows 7 64 ビットで開発していることに注意してください。そのため、このようなことが原因であることに常に不安を感じています。64ビットの奇抜さが原因であることが判明した障害に何度も遭遇しました。
追加情報: Indy 9、Delphi 2007。
うまくいけば、これは理解するのに十分明確でした. 十分な情報を提供できていないため、特定の回答を探しているわけではありません。ここからどこへ行くべきかについての提案を探しています。とても有難い!:)