Как получить код исключения или ошибки, вызвавший событие Failed клиента WCF?
private void ConnectionFaultedHandler(object sender, EventArgs e)
{
// Darn! Something went wrong.
// Better clean up.
this._Connection.Abort();
this._Connection.InnerChannel.Faulted -= this.ConnectionFaultedHandler;
// I'd really like to tell the user some detail of what blew up.
// But there is no Exception (or similar) property on the event.
this.NotifyUIOfConnectionFailure(e.Exception);
}
Обратите внимание, это похоже на эту ветку , за исключением того, что я 1) не смог получить такой способ работы и 2) он, похоже, решает проблему на стороне службы, я хотел бы разобраться с клиентом.
EDIT:
Чтобы уточнить, описанный выше обработчик является частью соединения, которое остается открытым в течение длительного времени (часы или даже дни); он имеет интерфейс обратного вызова для получения данных от службы. Я не спрашиваю об исключениях, когда вы вызываете методы, такие как Open, или методы, являющиеся частью интерфейса контракта, а о сбое, которое возникает из-за того, что (например) кто-то отключил сетевой кабель от вашего ПК, или просто не удалось подключиться к Интернету. *
Представьте, что это происходит через некоторое время после выполнения этого кода:
private void OpenConnection()
{
try
{
this._Connection.Open();
}
catch (Exception ex)
{
// Yes, I should be catching CommunicationsException,
// and TimeoutException, but space is short on StackOverflow.
return;
}
Debug.Assert(this._Connection.State == Open);
this._Connection.InnerChannel.Faulted += this.ConnectionFaultedHandler;
}