2

FaultException をスローできる wcf サービスを呼び出したいのですが、それを非同期で行いたいと考えています。すべてが問題なければ例外は返されませんが、サービスが FaultException の 1 つをスローすると、クライアントで CommunicationObjectFaultedException が発生し、そのプロパティのいずれにも元の FaultException が含まれません。

これについてこれまでに学んだことから、情報は別の場所に保存されているということです。正確にどこにあるのか誰か教えてください。

たとえば、次の 2 つはユーザーの登録を処理します。

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

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

1 に答える 1

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());
            }
        }            
    }
于 2011-02-26T19:59:45.330 に答える