方法 : Web サービスを非同期で呼び出す
更新 : 2007 年 11 月
この例では、非同期メソッド呼び出しの結果を取得できるように、Web サービスの非同期ハンドラ イベントにハンドラが割り当てられます。この例では、http://www.xmethods.net の DemoTemperatureService Web サービスを使用しています。
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 サービスを参照します。アドレスは次のとおりです。
http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
詳細については、「方法 : マネージ コードを使用して Web サービスにアクセスする」を参照してください。
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 イベント ハンドラに渡されます。
参照
処理手順
方法 : マネージ コードを使用して Web サービスにアクセスする