Каков наилучший способ отменить асинхронный запрос WCF?
(Предполагая, что метод WCF называется MyFunction)
В настоящее время для поддержки отмены запроса WCF я использую методы BeginMyFunction / EndMyFunction, сгенерированные svcutil (и обрабатываю флаг isCanceled при отправке результатов в основной поток). Я хотел бы использовать метод MyFunctionAsync (и вместо этого подключиться к событию MyFunctionAsyncCompleted) для асинхронных вызовов вместо Begin / End.
Каков наилучший / поддерживаемый способ обработки отмены запросов WCF, если используется MyFunctionAsyncCompleted, и при этом гарантируется, что событие не будет запущено на странице, которая больше не загружается (то есть навигация по страницам внутри фрейма).
Спасибо!
РЕДАКТИРОВАТЬ:
Я решил, что хочу создать свой объект WcfClient для каждого вызова (в отличие от каждого WPF-страницы или отдельного приложения), поэтому вот что я придумала:
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();
}
}
Мне трудно понять, каков рекомендуемый способ выполнить то, что я только что реализовал. Это нормально, как есть, или есть ли подводные камни / крайние случаи, о которых мне нужно беспокоиться? Что является золотым стандартом в том, что касается правильной отмены вызова WCF?