Как отменить асинхронный вызов WCF?
Я пытался некоторое время узнать, как реализовать отмену вызовов WCF на основе нового механизма .NET 4.5 CancellationToken. Все образцы, которые я обнаружил, не основаны на 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;
}
Как мне отменить эту задачу? Пожалуйста, приведите конкретный пример, применимый к WCF на .NET 4.5+
РЕДАКТИРОВАТЬ:Ответы ниже, кажется, указывают, что это невозможно по техническим причинам. Итак, представьте, я делаю свой сервисContextMode=Session
затем установите статическую переменную (в отдельном вызове службы) с именемcancellationPending=true
Мой оригинальный вызов все еще выполняется на этом этапе, и он периодически проверяет эту переменную. Я все еще не смогу отменить? было бы все еще невозможно? если так, то почему?