次の方法で共有


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

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

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

プロキシ クラスを使用すると、アプリケーションが関数の完了を待機する 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 イベント ハンドラーに渡されます。

こちらも参照ください