はじめまして。
皆様の知恵を拝借したいと思い、書込みします。
httpでのファイル取得を行うプログラムを作成しており、次のような処理を行っていると
ころ、HttpQueryInfo()の呼出しでエラーコード(GetLastError)が12019で返ってくる場合
があります。
ヘルプ等を確認してみても、「要求された処理に対して、ハンドルは状態が正しくありま
せん。」とだけ記載されていて、このエラーを受けてどう対処すべきなのかがよく判りま
せんでした。
メッセージ内容からは、プログラムエラーのような感じもするのですが、たまにしかエ
ラーとならない事や、一旦Close()して再取得すれば正常に取得できる事から通信状態に
よる気もします。
どなたか、このエラーの意味を知っている方おられましたら、是非ご教授御願い致します。
(処理)
InternetOpen()→InternetConnect()→HttpOpenRequest()→HttpSendRequest()
→HttpQueryInfo()(※ここ!)→この後は、データリードとクローズ処理
※ちなみに、処理は非同期通信で行っています。
失礼しました。
開発環境明記が抜けていたので追記します。
Win2000 VC6.0SP5 (WININET-APIを直接利用)
<対象:VC++ラウンジ>
MSDNで以下のような情報は見つけましたが、対象製品が特定されている(PocketPC向け?)
事と他に同様の説明が見つからない事から、これを信じて良いものか判別に困っています。
http://support.microsoft.com/?id=330465
(抜粋)
INTERNET 19
デバイス ソフトウェア エラーが発生するため、
(ERROR_INTERNET_INCORRECT_HANDLE_STATE):同期に失敗した INTERNET_19。 ネットワー
ク管理者に問い合わせてください。
説明: この問題は、一時的なネットワークの問題によって発生する可能性があります。
(対象製品)
・Microsoft Mobile Information Server 2002 Enterprise Edition
・Microsoft Mobile Information Server 2001 Enterprise Edition
以上、よろしく御願いします。
ITOさん、情報ありがとうございます。
ただ、同期制御でのインターネットファイル取得としてはサンプルとなるようですが、残
念ながら私が求めていた、エラー(12019)についての対処に繋がる情報は見つかりません
でした。
以上、よろしく御願いします。
けんたんさん、情報ありがとうございます。
InternetWriteFileではなく、InternetReadFileなので関係ないのかと捉えていました
が、どうなんでしょう?
とりあえず、ダメ元で試してみる事にします。
HttpOpenRequestにINTERNET_FLAG_NO_CACHE_WRITEを指定してみましたが、結果は同じで
した。
このエラーが、通信状態によって出るべくして出ているなら問題ないのですが・・・
http://www.codeproject.com/internet/asyncwininet.asp?
df=100&forumid=1409&exp=0&select=86554
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/winhttp/http/error_messages.asp
エラー 12019 ERROR_WINHTTP_INCORRECT_HANDLE_STATE」
「The requested operation cannot be carried out because the handle supplied is
not in the correct state.」
確認して下さい。
「WinHttpSendRequest」で起こるエラーです。
MSDNで見ましたか?
「同期に失敗した 」ではないです
ITOさん、情報ありがとうございます。
WinHttpSendRequestという関数もあったのですね。
コード内容としては、基本的に変わりない気もしますが、こちらのコードでも検索してみ
ました。
HttpSendRequest:ERROR_INTERNET_INCORRECT_HANDLE_STATE
WinHttpSendRequest:ERROR_WINHTTP_INCORRECT_HANDLE_STATE
多分、意味は同じなのでしょうけれど。。。
頂いたキーワードで検索していると以下のサイトがみつかりました。
http://www.eggheadcafe.com/ng/microsoft.public.winhttp/post3357837.asp
これを見ていると、もしかしてエラーコードとして12019を返された場合でも
実はQueryStatusCodeを取得するとレスポンス100で返ってくるのかな?
と思ったのですが、違いますでしょうか?
# 激しく英語ができないので、自信なしですが・・・(^^;
試しに、12019が返った際にもエラー処理とせず、ステータスコードを取得してみたいと
思います。
また結果確認できましたら、報告します。
# HTTP通信処理で、このコードが返ればこう処理する、といった流れは
# 皆様どうやって情報を得ているのでしょう・・・?
# 私がMSDNを使えていないだけなのかなぁ。。
そのサイトを見る限りでは、
「レスポンス100を行ってみて下さい。」
みたいです。
MFCであれば、日本語ドキュメントがありそうですよね。
この関連は僕も詳しくないです。
すみません。