方法 : 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 サービス クライアントの実装
同期 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
クライアント 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" %>
自動プロキシ生成を使用するには、Web サービス記述言語ツール (Wsdl.exe) を使用して WSDL ファイルを生成し、そのファイルをクライアント App_WebReferences サブディレクトリに配置します。詳細については、「ASP.NET Web Site Layout」を参照してください。
サービス クラス名と文字列
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"
クライアント アプリケーション コードで、プロキシの 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
クライアント アプリケーション コードで、プロキシに対して 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")