2012-04-27 23 views
0

WCFでasyn CTPを使用しようとしていますが、タスクがシリアライズできないため、問題があります。WCF:非同期CTP:それは使用できますか?

私はCTP v3をインストールしました。

asyn CTP with WCFを使用することはできますか? CTPだけをインストールするよりも何かを設定する必要がありますか?

私は、サービス側で非同期CTPを使用するのではなく、非同期CTPジェットを使用できないと考えています。非同期メソッドを実装することができます。サービス。これは良い選択ですか?この場合、サービスは非同期メソッドを実装しません。

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

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

ありがとうございました。 ダイムロク。

答えて

1

私は非同期CTPとVS 2010についてはよく分からないんだけど、(おそらくとにかく使用する必要があります)VS 11のベータ版で、あなたは、単にTaskを返す操作定義することができます。その後、

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

をとasyncを使用してそれを実装:

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

私は同じアプローチは、非同期CTPに働くだろうと仮定しますが、それはただの仮定です。

+0

[OerationContract]を使用すると、タスクがシリアル化できないというエラーが表示されるため、おそらくCTPはVS2010のWCFと互換性がありません。 –

+0

そうですね。なぜVS 11を試してみませんか? – svick

+0

さて、VS 11はまだベータ版なので、この場合はオプションではありません。実稼働アプリケーション用です。 –

0

非ブロッククライアント呼び出しを達成するための最も簡単な方法は、2つの理由のために、クライアント側である:

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

ベース(したがって非同期/のawait対応)>クライアント側タスク<を生成する方法:VS11において

  1. 、新しいチェックボックスが存在する:「タスクベースの方法の生成」の下「サービス参照の構成」ダイアログの「非同期操作の生成を許可する」 (私はそれがまだ文書化されていないと信じています)
  2. CTPの場合、hereという拡張子を使用してタスクベースのメソッドを生成できます。
関連する問題