A WCFの契約は次のようになります。タスクベースのWCF呼び出しをOneWayにする必要がありますか?
[ServiceContract]
public interface IService
{
[OperationContract]
void DoSomethingFast();
[OperationContract]
void DoSomethingSlow();
[OperationContract]
int GetSomethingFast();
[OperationContract]
int GetSomethingSlow();
}
クライアントは、これらの呼び出しのいずれかを行い、そのスレッドのブロックをサーバがそのことをしながら。 Fast
メソッドの場合は問題ありませんが、Slow
メソッドの場合、このブロックは理想とはかけ離れています。彼らは実際には2つの方法ですので、私たちはDoSomething
方法にを追加することができますが、我々はGetSomething
メソッドのために同じことを行うことはできません - 私たちは結果を待つを持っている:
[ServiceContract]
public interface IService
{
[OperationContract(IsOneWay = true)]
void DoSomethingFast();
[OperationContract(IsOneWay = true)]
void DoSomethingSlow();
[OperationContract]
int GetSomething();
[OperationContract]
int GetSomethingSlow();
}
はTask-を入力します。ベースの非同期パターン(TAP)。私たちはTask
とWCFを返すように契約を定義しています。私の知る限りでは、魔法の舞台裏ですぐにTask
を返します。完了する前にWCFサービスからのコールバックを待ちます。これは、代わりにawait
の使用を可能にする、クライアント側のブロッキングを排除します。
[ServiceContract]
public interface IService
{
[OperationContract(IsOneWay = true)]
Task DoSomethingFastAsync();
[OperationContract(IsOneWay = true)]
Task DoSomethingSlowAsync();
[OperationContract]
Task<int> GetSomethingAsync();
[OperationContract]
Task<int> GetSomethingSlowAsync();
}
私の質問はどのようにこのすべての作品、そしてあなたはまだサービス契約上のを含める必要があるかどうかについてです:
- 上記のビットは私の知る限りで正確ですですか?サービスが終了したことを通知すると、WCFは自動的に
Task
を返しますか? - 上記の魔法のためにはが必要ですか?もしそうでなければ、それはまったく効果がありますか?
- サービスからのコールバックが「完了しました」または「ここにあなたの結果があります」と同じように、
DoSomething
とGetSomething
コールを同等に扱うことができますか?したがって、が必要な場合は、GetSomething
メソッドでも使用できますか?