tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: MSXML2.XMLHTTP60 をログオフ状態で使用
投稿日: 2015/07/14(Tue) 15:48
投稿者魔界の仮面弁士
> プログラム部分は同じです
現在はスケジューラーに登録せず、直接起動でテストしている状況なのでしょうか。


> また、fiddler(httpプロクシ)を使ってみると
Inet API ベースのライブラリである XMLHTTP と、
WinHTTP ベースのライブラリである ServerXMLHTTP とでは、プロキシの設定方法が異なります。

ServerXMLHTTP の場合は、Proxycfg コマンドもしくは netsh winhttp コマンドを用いて
設定するか、あるいはコードから setProxy メソッドを用いて設定することになります。


> [objXML.readyState = 4 まで待ち]
この待機は、どのように行っていますか?


> ここで、readystate がずっと1のままで、4になりません。
非同期モードを採用しているのは、意図的なものでしょうか?
特に理由が無ければ、open メソッドの第三引数を False に変更し、
同期モードでの実行に切り替えてみて下さい。通信が完了するまでは
send が戻ってこなくなるため、readyState の判定を行う必要がなくなります。
(タイムアウト設定が必要なら、setTimeouts メソッドを併用します)


もし、どうしても非同期モードで通信するのであれば、処理のために
メッセージポンプが必要となります(ちなみに XMLHTTP でも必要です)。

すなわち、ServerXMLHTP を非同期モードで待機させる場合には、
 案1) ReadyState のポーリング監視中に、waitForResponse メソッドを呼び出してメッセージポンプを回す。
 案2) フォームに Timer を貼り、Tiemr イベントで ReadyState プロパティを定期的にチェックする。
 案3) onreadystatechange プロパティに、コールバックオブジェクトをセットして通知してもらう。
の何れかが必要だということです。


第3案に書いたのコールバックオブジェクトとは、自作のクラスモジュールのことです。
作成手順としてはこんな感じ。
 (1) Class モジュールを作成。たとえば ReadyStateHandler.cls として。
 (2) そこに「Public Sub OnReadyStateChange()」という引数無しのメソッドを作成。
 (3) そのメソッドに対し、[ツール]-[プロシージャ属性] 画面から、
   [詳細]-[プロシージャID]欄に「(既定値)」をセットする。
 (4) 呼び出し側では、
    Set objHandler = New ReadyStateHandler
    Set objXML.onreadystatechange = objHandler をセットしておく。

登録に成功すれば、readyState が変化するたびに (2)のメソッドが
イベントのように呼び出されるので、そこで readyState を判断する形です。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。