Wie kann eine asynchrone WCF-Anforderung am besten abgebrochen werden?

(Angenommen, eine WCF-Methode mit dem Namen "MyFunction")

Um das Abbrechen einer WCF-Anforderung zu unterstützen, verwende ich derzeit die von svcutil generierten BeginMyFunction / EndMyFunction-Methoden (und verwende ein isCanceled-Flag, wenn die Ergebnisse an den Haupt-Thread gesendet werden). Ich möchte die MyFunctionAsync-Methode (und stattdessen das MyFunctionAsyncCompleted-Ereignis verwenden) für asynchrone Aufrufe anstelle von Begin / End.

Was ist die beste / unterstützte Methode, um WCF-Anforderungen abzubrechen, wenn MyFunctionAsyncCompleted verwendet wird, und dennoch sicherzustellen, dass das Ereignis nicht auf einer Seite ausgelöst wird, die nicht mehr geladen ist (d. H. Seitennavigation innerhalb eines Frames).

Vielen Dank

BEARBEITEN

Ich habe beschlossen, mein WcfClient-Objekt auf Aufrufbasis zu erstellen (im Gegensatz zu Pro-WPF-Seite oder Pro-Anwendung). Deshalb habe ich mir Folgendes ausgedacht:

public void StartValidation(){
    WcfClient wcf = new WcfClient();
    wcf.IsValidCompleted += new EventHandler<IsValidCompletedEventArgs>(wcf_IsValidCompleted);
    //pass the WcfClient object as the userState parameter so it can be closed later
    wcf.IsValidAsync(TextBox.Text, wcf);  
}

void wcf_IsValidCompleted(object sender, IsValidCompletedEventArgs e) {
    if(!m_IsCanceled){
        //Update the UI
        //m_IsCanceled is set to true when the page unload event is fired
    }
    //Close the connection
    if (e.UserState is WcfClient) {
        ((WcfClient)e.UserState).Close();
    }
}

Ich finde es schwierig herauszufinden, wie ich das, was ich gerade implementiert habe, am besten umsetzen kann. Ist das in Ordnung, oder gibt es Fallstricke, über die ich mir Sorgen machen muss? Was ist der goldene Standard, wenn es darum geht, einen WCF-Anruf ordnungsgemäß abzubrechen?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage