如何从异步WCF调用中捕获FaultExceptions?

时间:2011-02-26 18:38:10

标签: wcf asynchronous faultexception

我想调用一个可以抛出FaultException的wcf服务,但我想异步地这样做。如果一切正常,它不会返回异常,但是如果服务抛出我的一个FaultExceptions,在客户端中我得到一个CommunicationObjectFaultedException,它的所有属性都不包含我原来的FaultException。

到目前为止,我可以了解到的是,该信息存储在其他地方。任何人都可以告诉我其中究竟是什么?

例如,这两个处理用户的注册:

internal void CallRegisterUser()
{
    _service.RegisterUserAsync("username", "pass");
}

void _service_RegisterUserCompleted(object sender, RegisterUserCompletedEventArgs e)
{
    if (e.Error != null) { MessageBox.Show(e.Error.Message); }
}

1 个答案:

答案 0 :(得分:1)

一个过于简单的示例,但这是您获取自定义故障详细信息的方式:

    void client_RegisterUserCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            if (e.Error is FaultException<UserRegistrationFault>)
            {
                UserRegistrationFault fault = (e.Error as FaultException<UserRegistrationFault>).Detail;
                MessageBox.Show("Error: " + fault.TheExceptionMessage);
            }
            else
            {
                MessageBox.Show("Error: " + e.Error.ToString());
            }
        }            
    }