私は、新しい .NET 4.5 CancellationToken メカニズムに基づいて WCF 呼び出しキャンセルを実装する方法を見つけようと、しばらく試みてきました。私が見つけたすべてのサンプルは WCF ベースではなく、サービスの境界を越えていません。
私のサービス:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MyService : IMyService
{
public void LongOperation()
{
// do stuff that takes ages...
// please cancel me!
}
}
私のクライアント (デスクトップ アプリ):
自動生成されたプロキシを使用する:
private async void DoLongRunningTaskAsync()
{
var asyncTask = _myService.LongOperationAsync();
await asyncTask;
}
このタスクをキャンセルするにはどうすればよいですか? .NET 4.5+ の WCF に適用できる具体的な例を教えてください
編集:
以下の回答は、技術的な理由から不可能であることを示しているようです。したがって、サービスを作成ContextMode=Session
し、(別のサービス呼び出しで) という静的変数を設定するとcancellationPending=true
、元の呼び出しはこの段階でまだ実行されており、定期的にその変数をチェックします。それでもキャンセルできないのでしょうか?それでも無理でしょう?もしそうなら、なぜですか?