方法: Web サービスを非同期で呼び出す (Visual Basic)

この例では、Web サービスの非同期ハンドラー イベントにハンドラーをアタッチして、非同期メソッド呼び出しの結果を取得できるようにします。 この例では、http://www.xmethods.net にある DemoTemperatureService Web サービスを使用しています。

Visual Studio 統合開発環境 (IDE) でプロジェクトの Web サービスを参照すると、この Web サービスが My.WebServices オブジェクトに追加され、指定された Web サービスにアクセスするためのクライアント プロキシ クラスが IDE によって生成されます。

プロキシ クラスを使用すると、Web サービス メソッドを同期的に呼び出すことができ、この場合、アプリケーションは関数が完了するまで待機します。 また、プロキシはメソッドを非同期的に呼び出すために使用できる追加のメンバーを作成します。 Web サービス関数 NameOfWebServiceFunction ごとに、プロキシは NameOfWebServiceFunctionAsync サブルーチン、NameOfWebServiceFunctionCompleted イベント、および NameOfWebServiceFunctionCompletedEventArgs クラスを作成します。 この例では、DemoTemperatureService Web サービスの getTemp 関数にアクセスする非同期メンバーの使用方法を示します。

注意

ASP.NET では My.WebServices オブジェクトがサポートされていないため、このコードは Web アプリケーションでは動作しません。

Web サービスを非同期で呼び出す

  1. http://www.xmethods.net にある DemoTemperatureService Web サービスを参照します。 アドレスは次のとおりです。

    http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
    
  2. getTempCompleted イベントのイベント ハンドラーを追加します。

    Private Sub getTempCompletedHandler(ByVal sender As Object,
        ByVal e As net.xmethods.www.getTempCompletedEventArgs)
    
        MsgBox("Temperature: " & e.Result)
    End Sub
    

    注意

    Handles ステートメントを使用して、イベント ハンドラーを My.WebServices オブジェクトのイベントに関連付けることはできません。

  3. イベント ハンドラーが getTempCompleted イベントに追加されたかどうかを追跡するためのフィールドを追加します。

    Private handlerAttached As Boolean = False
    
  4. 必要に応じて、イベント ハンドラーを getTempCompleted イベントに追加するメソッドを追加し、getTempAsync メソッドを呼び出すメソッドを追加します。

    Sub CallGetTempAsync(ByVal zipCode As Integer)
        If Not handlerAttached Then
            AddHandler My.WebServices.
                TemperatureService.getTempCompleted,
                AddressOf Me.TS_getTempCompleted
            handlerAttached = True
        End If
        My.WebServices.TemperatureService.getTempAsync(zipCode)
    End Sub
    

    getTemp Web メソッドを非同期的に呼び出すには、CallGetTempAsync メソッドを呼び出します。 Web メソッドが終了すると、その戻り値が getTempCompletedHandler イベント ハンドラーに渡されます。

関連項目