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