非同期で Web Service を利用する方法

  非同期で Web Service を利用するには、 Web Service プロキシクラスの「Begin????」「End?????」メソッドを使用します。
これらは、 Web Service 内の「WebMethod」属性が付いたメソッドにそれぞれ対応しています。
  非同期で Web Service を呼び出すには2つの方法があります。1つは、呼出し後、呼び出しが完了したかどうかを監視して後処理を行う方法と、もう1つは、呼び出し完了時にコールバックプロシージャが呼び出され、これにより後処理を行う方法があります。
 この、非同期コールバックプロシージャを用いて呼び出すと、呼び出しが完了した時点で、コールバックメソッドが呼ばれるので、完了の監視が必要なくなり、容易です。
【使い方】

 Web Service で非同期コールバックプロシージャを用いて呼び出すサンプルです。
// myService は、Webサービス
// EndReadMethod は、DataSet読込み非同期コールバックメソッド
// myIAsyncResult は、IAsyncResultインターフェイス(非同期操作のステータスを表します)
// Read_CallBack は、非同期完了時に呼び出されるコールバックメソッド(System.AsyncCallback)

/// <summary>DataSet取得非同期コールバックメソッドハンドラ。</summary>
public delegate DataSet CallbackDataSetHandler( System.IAsyncResult ar );

//Debug.WriteLine("GetDataSet : ");

// 非同期終了(Callback)メソッドを設定する
EndReadMethod = new CallbackDataSetHandler( myService.EndGetDataSet );

// 指定期間の明細データのDataSetを取得する
try
{
    myIAsyncResult = myService.BeginGetDataSet( ID, Type, BeginDate, EndDate
                                                   , new System.AsyncCallback( Read_CallBack ), myService);
}
catch( Exception ex )
{
    MessageBox.Show("明細データの読込み開始に失敗しました。", "エラー",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
}
 

 DataSet読込み完了時のコールバックメソッドのサンプルです。
// EndReadMethod は、DataSet読込み非同期コールバックメソッド

/// <summary>後処理メソッドハンドラ(結果DataSet渡し)。</summary>
public delegate void    AfterCallbackDataSetHandler( System.Data.DataSet ds );

/// <summary>
///  DataSet読み取り非同期のメソッドの完了時コールバックメソッド。
/// </summary>
/// <param name="ar">非同期操作のステータス。</param>
public void Read_CallBack( System.IAsyncResult ar )
{
    //====================
    // データの読込み
    //====================
    //Debug.WriteLine("Read_CallBack Start");

    // DataSetを取得する
    DataSet dsWork;

    try
    {
        dsWork = EndReadMethod(ar);

        //Debug.WriteLine("EndReadMethod End:");
    }
    catch( Exception ex )
    {
        MessageBox.Show("データの読込みに失敗しました。", "エラー",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
        //Debug.WriteLine("EndReadMethod Error:" + ex.Message);
        return;
    }
}
【注意】
戻る