方法 : 非同期 Web サービス メソッドを作成する

このトピックの対象は、レガシ テクノロジに特定されています。XML Web サービスと XML Web サービス クライアントは以下を使用して作成してください。 Windows Communication Foundation.

この手順では、1 つの Web サービス メソッドを、非同期アクセス用に設計されたメソッドのペアに変換する方法について説明します。この手順では、.NET Framework の非同期デザイン パターンに従います。「非同期 XML Web サービス メソッド」トピックでは、この手順の動作方法を説明しています。また、Web サービス メソッドが同期アクセス用に設計されている場合も含めて、Web サービス メソッドに非同期にアクセスできるクライアント プロキシ クラスを Wsdl.exe ツールで生成する方法についても説明しています。

非同期 Web サービス メソッドを実装するには

  1. 同期 Web サービス メソッドを 2 つのメソッドに分割します。これらのメソッドは基本名が同じで、一方の名前は Begin で始まり、もう一方の名前は End で始まります。

  2. Begin メソッドのパラメーター リストには、このメソッドの機能で使用するすべての入力パラメーターと参照渡しのパラメーター、および 2 つの追加パラメーターが含まれています。

    • 参照渡しのパラメーターは、入力パラメーターと同様に指定します**。

    • 最後から 2 番目のパラメーターは AsyncCallback である必要があります。AsyncCallback パラメーターによって、クライアントはデリゲートを提供できます。このデリゲートは、メソッドが完了したときに呼び出されます。非同期 Web サービス メソッドが別の非同期メソッドを呼び出す場合は、AsyncCallback パラメーターをそのメソッドの最後から 2 番目のパラメーターに渡すことができます。

    • 最後のパラメーターは Object です。Object パラメーターによって、呼び出し元はメソッドにステータス情報を提供できます。非同期 Web サービス メソッドが別の非同期メソッドを呼び出す場合は、Object パラメーターをそのメソッドの最後のパラメーターに渡すことができます。

    • 戻り値は、IAsyncResult 型である必要があります。

  3. End メソッドのパラメーター リストは、先頭の IAsyncResult と、メソッドの機能に固有の出力パラメーターおよび参照渡しのパラメーターで構成されます**。

    • 戻り値は、同期 Web サービス メソッドの戻り値と同じ型です。

    • 参照渡しのパラメーターは、出力パラメーターと同様に指定します**。

using System;
using System.Web.Services;

[WebService(Namespace="https://www.contoso.com/")]
public class MyService : WebService 
{
    public RemoteService remoteService;
    public MyService() 
    {
        // Create a new instance of proxy class for 
        // the Web service to be called.
        remoteService = new RemoteService();
    }
    // Define the Begin method.
    [WebMethod]
    public IAsyncResult BeginGetAuthorRoyalties(String Author,
        AsyncCallback callback, object asyncState) 
    {
        // Begin asynchronous communictation with a different XML Web
        // service.
        return remoteService.BeginReturnedStronglyTypedDS(Author,
            callback,asyncState);
    }
    // Define the End method.
    [WebMethod]
    public AuthorRoyalties EndGetAuthorRoyalties(IAsyncResult
        asyncResult) 
    {
        // Return the asynchronous result from the other Web service.
        return remoteService.EndReturnedStronglyTypedDS(asyncResult);
    }
}
Imports System.Web.Services
<WebService(Namespace:="https://www.contoso.com/")> _
Public Class MyService
    Inherits WebService
    Public remoteService As RemoteService

    Public Sub New()
        MyBase.New()
        ' Create a new instance of proxy class for 
        ' the Web service to be called.
        remoteService = New RemoteService()
    End Sub

    ' Define the Begin method.
    <WebMethod()> _
    Public Function BeginGetAuthorRoyalties(ByVal Author As String, _
    ByVal callback As AsyncCallback, ByVal asyncState As Object) _
        As IAsyncResult
        ' Begin asynchronous communictation with a different XML Web
        ' service.
        Return remoteService.BeginReturnedStronglyTypedDS(Author, _
            callback, asyncState)
    End Function
    ' Define the End method.
    <WebMethod()> _
    Public Function EndGetAuthorRoyalties(ByVal asyncResult As _
        IAsyncResult) As AuthorRoyalties
        ' Return the asynchronous result from the other Web service.
        Return remoteService.EndReturnedStronglyTypedDS(asyncResult)
    End Function
End Class

参照

処理手順

方法 : Web サービス メソッドで非同期呼び出しをチェーンする

概念

非同期 XML Web サービス メソッド
XML Web サービスとの非同期通信