Wie kann ich einen asynchronen WCF-Anruf abbrechen?
Ich habe einige Zeit versucht, herauszufinden, wie die WCF-Anrufannullierung basierend auf dem neuen .NET 4.5 CancellationToken-Mechanismus implementiert werden kann. Alle Beispiele, die ich gefunden habe, basieren nicht auf WCF und überschreiten nicht die Servicegrenze.
Mein Service:[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MyService : IMyService
{
public void LongOperation()
{
// do stuff that takes ages...
// please cancel me!
}
}
Mein Client (Desktop-App):Mit einem automatisch generierten Proxy:
private async void DoLongRunningTaskAsync()
{
var asyncTask = _myService.LongOperationAsync();
await asyncTask;
}
Wie kann ich diese Aufgabe abbrechen? Bitte geben Sie ein konkretes Beispiel für WCF unter .NET 4.5 + a
BEARBEITENDie folgenden Antworten scheinen darauf hinzudeuten, dass dies aus technischen Gründen nicht möglich ist. Also stell dir vor, ich mache meinen ServiceContextMode=Session
, dann setzen Sie eine statische Variable (in einem separaten Serviceabruf) mit dem NamencancellationPending=true
, mein ursprünglicher Aufruf wird zu diesem Zeitpunkt noch ausgeführt und überprüft diese Variable regelmäßig. Kann ich trotzdem nicht stornieren? Wäre es immer noch unmöglich? Wenn ja warum