У меня есть сервер WCF, который поддерживает ссылку на обратный вызов клиента с использованием дуплексной модели.Закрытие WCF-клиента
Если я явно закрыть соединение обратного вызова на сервере:
ICallBack callBack = OperationContext.Current.GetCallbackChannel<ICallBack>();
callBack.Close()
клиент не получит уведомление об этом событии через подписку на любой из:
client.InnerChannel.Closed += Handler;
client.InnerDuplexChannel.Closed += Handler;
Ни обработчик события выполняется.
Однако, если изменить функцию обратного вызова к Abort
вместо Close
на стороне сервера, клиент получает уведомление о Faulted
обработчика, а затем впоследствии Closed
обработчик. Таким образом, прерывание работы, как и ожидалось.
Я проверил обратный вызов в допустимом состоянии, так почему это клиент получающего Faulted
уведомление о Abort
и НЕ Closing
уведомления о Close
? Состояние обратного вызова после Close
- Closed
.
В соответствии с MSDN documentation изящно закрывающее соединение обратного вызова с использованием Close
было бы моим предпочтительным выбором по сравнению с более резким Abort
.