如何获取WCF客户端故障事件的原因?

时间:2009-11-30 02:44:11

标签: c# wcf exception

如何获得导致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);  
}

请注意,这类似于this thread,除了I 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;
}

1 个答案:

答案 0 :(得分:0)

顺便说一下,你的问题不是那么清楚

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

每当你抛出一个异常对象时,将在客户端上使用相应的catch块接收它。

如果出现通道问题(未连接),则收到故障......