如何获取导致WCF客户端的Faulted事件的异常或错误代码?

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);
}


请注意,这与this thread相似,除了我1)无法以这种方式工作,以及2)似乎正在解决服务端的问题,我想在客户端中处理。

编辑:

需要说明的是,上述处理程序是连接保持长时间(几小时甚至几天)的一部分;它具有一个回调接口来接收来自服务的数据。当您调用诸如Open之类的方法或属于合同接口的方法时,我不是在问异常,而是因为(例如)有人从您的PC上拔下了网络电缆,或者您的Internet连接刚刚失败而发生的错误。

试想一下,这段代码执行之后会发生:

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;
}

最佳答案

顺便说一下,您的问题不太清楚

接收故障不同于接收异常。

每当您抛出异常对象时,该对象将在客户端上带有对应的catch块。

通道出现问题时出现故障(未连接)...

关于c# - 如何获取WCF客户端故障事件的原因?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1817620/

10-17 01:58