方法 : ASP.NET 2.0 を使用してイベント ドリブンの非同期 Web サービス クライアントを実装する

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

.NET Framework Version 2.0 では、Web サービス記述言語ツール (Wsdl.exe) によって生成されたプロキシ コードは、新しい event-driven asynchronous programming model をサポートします。イベント ドリブンの非同期プログラミング モデルと ASP.NET 2.0 Web クライアントの自動プロキシ生成を組み合わせて、Web サービス ベースの高性能 Web アプリケーションを簡単に構築できます。

Multithreaded Programming with the Event-based Asynchronous Pattern では、イベントを使用してコールバックを処理する新しい非同期プログラミング モデルを導入することにより、ユーザー自身が複雑なマルチスレッド コードを実装することなく、マルチスレッド アプリケーションを簡単に構築できるようになっています。新しいイベント ドリブン非同期モデルの概要については、「Event-based Asynchronous Pattern Overview」を参照してください。この新しいモデルを使用したクライアント実装の詳細については、「How to: Implement a Client of the Event-based Asynchronous Pattern」を参照してください。

.NET Framework Version 2.0 の ASP.NET アプリケーションを使用して作成した Web サービス クライアントは、新しい App_WebReferences サブディレクトリを利用できます。これにより、クライアント ASP.NET アプリケーションが、WSDL コントラクトをサポートする XML Web サービスを呼び出すときに、WSDL ファイルをプロキシ コードに動的にコンパイルできます。

サンプル全体については、「ASP.NET Web Services QuickStarts」の「RADAsync クイックスタート」を参照してください。

イベント ドリブンの Web サービス クライアントの実装

  1. 同期 Web メソッドを使用して XML Web サービスを作成し、非同期で最適に処理される、ある程度の時間がかかる動作を実行します。

    [WebMethod]
    public string HelloWorld() {
      Thread.Sleep(5000);
      return "Hello World";
    }
    
    <WebMethod()> _
    Public Function HelloWorld() As String 
      Thread.Sleep(5000)
    ..Return "Hello World"
    End Function
    
  2. クライアント ASP.NET アプリケーションで、@ Page ディレクティブに Async 属性を追加して true に設定し、@ Import ディレクティブを使用して System.Threading 名前空間をインポートします。

    <%@ Page Language="C#" Debug="true" Async="true" %>
    <%@ Import Namespace="System.Threading" %>
    
    <%@ Page Language="VB" Debug="true" Async="true" %>
    <%@ Import Namespace="System.Threading" %>
    
  3. 自動プロキシ生成を使用するには、Web サービス記述言語ツール (Wsdl.exe) を使用して WSDL ファイルを生成し、そのファイルをクライアント App_WebReferences サブディレクトリに配置します。詳細については、「ASP.NET Web Site Layout」を参照してください。

  4. サービス クラス名と文字列 WaitService を使用して新しいオブジェクトを作成することによって Web サービス クライアント アプリケーションを通常どおりに構築し、Web サービスの URL を Url プロパティに割り当てます。たとえば、サービス クラス名が HelloWorld の場合、クライアントは HelloWorldWaitService オブジェクトを作成します。

    HelloWorldWaitService service = new HelloWorldWaitService();
    service.Url = "https://localhost/QuickStartv20/webservices/Samples/RADAsync/cs/Server/HelloWorldWaitService.asmx";
    
    Dim service As New HelloWorldWaitService()
    service.Url = "https://localhost/QuickStartv20/webservices/Samples/RADAsync/vb/Server/HelloWorldWaitService.asmx"
    
  5. クライアント アプリケーション コードで、プロキシの Completed イベントにイベント ハンドラーを割り当てます。次のコード例では、クライアント ASP.NET ページに、Web サービス メソッドが制御を戻すと呼び出される HelloWorldCompleted メソッドが含まれます。

    //Add our callback function to the event handler. 
    service.HelloWorldCompleted += this.HelloWorldCompleted; 
    
    'Add our callback function to the event handler
    AddHandler service.HelloWorldCompleted, AddressOf Me.HelloWorldCompleted
    
  6. クライアント アプリケーション コードで、プロキシに対して Async メソッドを呼び出します。このメソッドの名前は Web メソッドと同じですが、"Async" が追加されています。詳細については、「How to: Implement a Client of the Event-based Asynchronous Pattern」を参照してください。このメソッド呼び出しは、クライアント ASP.NET ページに同期呼び出しとして表示されますが、すぐに制御を戻します。クライアント ASP.NET ページは、非同期呼び出しが完了してプロキシの Completed イベントが発生し、ハンドラー メソッドが実行されるまでブラウザーに返されません。

    service.HelloWorldAsync("second call");
    
    service.HelloWorldAsync("second call")
    

参照

その他のリソース

ASP.NET Web Services QuickStarts