非同期操作 (WCF Data Services)
Web アプリケーションは、内部ネットワーク内で実行するアプリケーションより長い、クライアントとサーバーとの間の待機時間に対応する必要があります。 Web を介して WCF Data Services サーバーにアクセスする場合、アプリケーションのパフォーマンスとユーザー エクスペリエンスを最適化するために DataServiceContext クラスおよび DataServiceQuery<TElement> クラスの非同期メソッドを使用することをお勧めします。
WCF Data Services サーバーでは、HTTP 要求は非同期として処理されますが、WCF Data Services クライアント ライブラリの一部のメソッドは同期であり、要求と応答のやり取りがすべて完了するまで待ってから実行を継続します。 WCF Data Services クライアント ライブラリの非同期メソッドは、このやり取りの完了を待たず、アプリケーションはユーザー インターフェイスの応答性を維持できます。
DataServiceContext クラスと DataServiceQuery<TElement> クラスでそれぞれ Begin および End で始まるメソッドのペアを使用して、非同期操作を実行できます。 Begin メソッドは、操作が完了したときにサービスが呼び出すデリゲートを登録します。 End メソッドは、完了した操作からのコールバックを処理するために登録されたデリゲートで呼び出します。 End メソッドを呼び出して非同期操作を完了するときは、操作を開始するために使用したものと同じ DataServiceQuery<TElement> または DataServiceContext インスタンスから呼び出しを行う必要があります。 各 Begin メソッドは、状態オブジェクトをコールバックに渡すことができる state パラメーターを受け取ります。 この状態オブジェクトは、コールバックで指定された IAsyncResult から取得され、対応する End メソッドを呼び出して非同期操作を完了するために使用されます。 たとえば、DataServiceQuery<TElement> インスタンスで BeginExecute メソッドを呼び出すときにインスタンスを state パラメーターとして指定した場合、同じ DataServiceQuery<TElement> インスタンスが IAsyncResult によって返されます。 この DataServiceQuery<TElement> のインスタンスは、EndExecute メソッドを呼び出してクエリ操作を完了するために使用されます。 詳細については、「方法: 非同期データ サービス クエリを実行する (WCF Data Services)」を参照してください。
注意
Silverlight 用の .NET Framework で提供されるクライアント ライブラリでは、非同期操作だけがサポートされます。詳細については、「WCF Data Services (Silverlight)」を参照してください。
.NET Framework クライアント ライブラリは、以下の非同期操作をサポートします。
操作 |
メソッド |
---|---|
DataServiceContext からのクエリの実行。 |
|
DataServiceContext からのバッチ クエリの実行。 |
|
DataServiceContext への関連エンティティの読み込み。 |
|
オブジェクトに対する変更の DataServiceContext への保存。 |
非同期操作のスレッドに関する考慮事項
マルチスレッド アプリケーションでは、非同期操作のコールバックとして登録されたデリゲートは、最初の要求を作成する Begin メソッドの呼び出しに使用されたものと同じスレッドで必ずしも呼び出す必要はありません。 特定のスレッドでコールバックを呼び出す必要のあるアプリケーションでは、応答を処理する End メソッドの実行を目的のスレッドに明示的にマーシャリングする必要があります。 たとえば、Windows Presentation Foundation (WPF) ベースのアプリケーションおよび Silverlight ベースのアプリケーションでは、Dispatcher オブジェクトで BeginInvoke メソッドを使用して応答を UI スレッドにマーシャリングする必要があります。 詳細については、「Querying the Data Service (WCF Data Services/Silverlight)」を参照してください。