方法: Web サービスを非同期で呼び出す (Visual Basic)
この例では、非同期メソッド呼び出しの結果を取得できるように、Web サービスの非同期ハンドラー イベントにハンドラーが割り当てられます。この例では、http://www.xmethods.net の DemoTemperatureService Web net」と入力します。
Visual Studio 統合開発環境 (IDE) では、プロジェクトで Web サービスを参照すると、My.WebServices オブジェクトにその Web サービスが追加され、その Web サービスにアクセスするためのクライアント プロキシ クラスが生成されます。
このプロキシ クラスを使用すると、Web サービス メソッドを同期で呼び出すことができます。つまりアプリケーションは、関数が終了するまで待機します。さらに、このプロキシは、メソッドを非同期で呼び出すために使用できる、追加的なメンバーを作成します。プロキシは、それぞれの Web サービス関数 NameOfWebServiceFunction について、NameOfWebServiceFunctionAsync サブルーチン、NameOfWebServiceFunctionCompleted イベント、および NameOfWebServiceFunctionCompletedEventArgs クラスを作成します。この例では、非同期のメンバーを使用して、DemoTemperatureService Web サービスの getTemp 関数にアクセスする方法を説明します。
[!メモ]
ASP.NET は My.WebServices オブジェクトをサポートしないため、このコードは Web アプリケーションでは動作しません。
Web サービスを非同期で呼び出すには
http://www.xmethods.net の DemoTemperatureService Web net」と入力します。アドレスは次のとおりです。
http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
getTempCompleted イベントのイベント ハンドラーを追加します。
Private Sub getTempCompletedHandler(ByVal sender As Object, ByVal e As net.xmethods.www.getTempCompletedEventArgs) MsgBox("Temperature: " & e.Result) End Sub
[!メモ]
Handles ステートメントを使用して My.WebServices オブジェクトのイベントにイベント ハンドラーを関連付けることはできません。
イベント ハンドラーが getTempCompleted イベントに追加されているかどうかを追跡するためのフィールドを追加します。
Private handlerAttached As Boolean = False
getTempCompleted イベントにイベント ハンドラーを追加するためのメソッドを必要に応じて追加し、getTempAsynch メソッドを呼び出すためのメソッドを追加します。
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 イベント ハンドラーに渡されます。