Inetコントロールのエラーを回避するには?


ぽぽろん  2006-04-13 22:41:17  No: 21017

お世話になってます。D5Proを使用しています。
Inetコントロールを使用して、Webサーバーへ接続するアプリを作成しているのですが、原因不明のエラーが発生していて困っています。

データ転送をExecuteで送受信しているのですが、Statusが変化していく中で、
icResponseReceived(8)になったらInetのタグによって送受信の処理を
Case文で分けていますが、送受信ともにまずはGetHeaderでヘッダーを取得
して、その内容をログに書いて・・・と進みますが、
ある環境(これが解らない…T_T)だと、GetHeaderに失敗しているのか、
ヘッダーの内容が取得できていないような感じになって、
その続きのコードが実行されないままStatusが9…10…と進んでしまって
結局なにも動作しません。

気になるのは、その時に「Unable to Complete Request」というメッセージ
ダイアログが表示されるのです。。。

ただ、エラーは出るものの、何度か同じ処理を繰り返すと正常に行く時も
あるので、コードのミスなのかサーバー側なのかの切り分けが
つかなくなっている状態なのです。

足りない情報などあれば、ご指摘ください。
よろしくお願い致します。


ぽぽろん  2006-04-15 02:54:39  No: 21018

えと、ソースはこんな感じです。

procedure TfrmMain.Inet1StateChanged(Sender:TObject;State:smallint);
{このイベントはExecute実行後、Stateが変化する都度呼び出される}
var
  wStr,wHdr: String;
begin
  case state of
  icNone:
  {1〜7まで省略}
  icResponseReceived: begin         //これはstateが8のとき
    case Inet1.Tag of
      RECEIVE_START:                //受信時の処理
        begin
          WriteLog('受信開始');     //ログ出力用手続き
          wHdr := Inet1.GetHeader();//ここが実行されてない?失敗?
          WriteLog(wHdr);           //取得したヘッダをログに出力
          {後続処理がある}
        end;
      SEND_START:  //送信時の処理
        begin
          WriteLog('送信開始');     //ログ出力用手続き
          wHdr := Inet1.GetHeader();//ここが実行されてない?失敗?
          WriteLog(wHdr);           //取得したヘッダをログに出力
          {後続処理}
        end;
    end; //case終わり
  icDisconnecting:                  // 9
  icDisconnected:                   // 10
  icError:                          // 11
  icResponseCompleted:              // 12
end;

上記のようにログを出しつつ検証してみると、case文が実行された後の「受信開始」「送信開始」は出力されているのですが、どうもGetHeaderに失敗しているのか、getheader後の処理が実行されずにステータスが進行してしまい、どこかのタイミングで「unable to complete request.」というエラーメッセージが出る感じです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加