0

WCFでasynCTPを使用しようとしていますが、タスクがシリアル化できないため、問題が発生します。

CTPv3をインストールしました。

WCFでasynCTPを使用することは可能ですか?CTPだけをインストールする以上の何かを構成する必要がありますか?

おそらくサービス側で非同期CTPを使用する代わりに、非同期CTPジェットを使用できない場合は、サービスの通常のメソッド(非同期メソッドではない)を呼び出す非同期CTPを使用して非同期メソッドを実装できると考えています。これは良いオプションですか?この場合、サービスは非同期メソッドを実装しません。

他のオプションはサービス側にあり、begin / endメソッドで非同期メソッドを実装し、Task.Factory.FromAsyncメソッドを使用してこの2つのメソッドをタスクにラップします。しかし、これはもっと手間がかかります。

したがって、私の質問は、クライアントがサービスの応答を待機している間、クライアントがブロックされないようにする場合、2つのソリューションを使用できるということです。まず、サービスの通常のメソッドを呼び出すクライアントで非同期CTPを使用するか、Task.Factory.FromAsyncを使用してサービスで非同期メソッドを使用します。どちらが最良の選択肢ですか?なんで?

ありがとう。ダイムロック。

4

2 に答える 2

1

Async CTP を使用した VS 2010 についてはわかりませんが、VS 11 Beta (おそらくとにかく使用する必要があります) を使用すると、次を返す操作を簡単に定義できますTask

[OperationContract]
Task<string> GetData(int value);

そして、次を使用して実装しasyncます。

public async Task<string> GetData(int value)
{
    return await …;
}

同じアプローチが Async CTP でも機能すると思いますが、それは単なる仮定です。

于 2012-04-27T15:47:46.657 に答える
0

ノンブロッキングクライアントコールを実現する最も簡単な方法は、次の2つの理由からクライアント側にあります。

  1. クライアント側の非同期メソッドは、既存のVSツールで生成できます
  2. タスクをサービス境界を越えて渡すには、独自の同期機能を作成する必要があります。

サービスのクライアント側のTask<>ベースの(したがって非同期/待機互換の)メソッドを生成するには、次のようにします。

  1. VS11には、[サービス参照の構成]ダイアログの[非同期操作の生成を許可する]の下にある[タスクベースのメソッドの生成]という新しいチェックボックスがあります。(まだ文書化されていないと思います)
  2. CTPの場合、ここで説明する拡張機能を使用して、タスクベースのメソッドを生成できます。
于 2012-08-09T00:11:12.547 に答える