次の方法で共有


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

この手順では、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 サービスとの非同期通信

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.