Como cancelar uma chamada assíncrona do WCF?
Estou tentando há algum tempo descobrir como implementar o cancelamento de chamada WCF com base no novo mecanismo .NET 4.5 CancellationToken. Todas as amostras que encontrei não são baseadas no WCF e não cruzam o limite do serviço.
Meu serviço:[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MyService : IMyService
{
public void LongOperation()
{
// do stuff that takes ages...
// please cancel me!
}
}
Meu cliente (aplicativo de desktop):Usando um proxy gerado automaticamente:
private async void DoLongRunningTaskAsync()
{
var asyncTask = _myService.LongOperationAsync();
await asyncTask;
}
Como cancelo esta tarefa? Forneça um exemplo concreto aplicável ao WCF no .NET 4.5+
EDITAR:As respostas abaixo parecem indicar que isso é impossível por razões técnicas. Então, imagine, eu faço meu serviçoContextMode=Session
, defina uma variável estática (em uma chamada de serviço separada) chamadacancellationPending=true
, minha chamada original ainda está sendo executada nesse estágio e verifica periodicamente essa variável. Ainda não seria possível cancelar? ainda seria impossível? se sim, por que?