2011-02-26 20 views
2

我想調用一個可以拋出FaultException的wcf服務,但我想這樣做是異步的。如果一切正常,它不會返回異常,但是如果服務拋出我的一個FaultExceptions,那麼在客戶端中,我得到一個CommunicationObjectFaultedException,並且它的任何屬性都不包含我的原始FaultException。如何從異步WCF調用中捕獲FaultExceptions?

從我迄今爲止所瞭解到的情況來看,這些信息存儲在其他地方。任何人都可以告訴我究竟在哪裏究竟是什麼?

例如這兩種處理用戶註冊:

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

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

你可以告訴你的代碼正在使用調用服務並捕獲異常? – 2011-02-26 19:07:48

+0

我有同樣的問題,你有沒有找到解決方案? – mservidio 2013-02-06 16:29:32

回答

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()); 
      } 
     }    
    } 
+0

是的,它是如果你得到一個FaultException。但是我得到CommunicationObjectFaultedException,沒有內部例外,只是說明存在一個錯誤。而已。我也不能將它轉換爲FaultException。 – Tenshiko 2011-02-26 20:09:53

+0

你的客戶是什麼類型的應用程序? WPF? Windows窗體? Silverlight的? – 2011-02-26 20:42:00

+0

還可以看看[這裏] http://msdn.microsoft.com/en-us/library/system.servicemodel.communicationobjectfaultedexception.aspx。看起來像CommunicationObjectFaultedException發生在你的代理對象不能再使用時。如果每次調用CallRegisterUser方法時都創建服務代理的新實例(_service),這是否也會發生? – 2011-02-26 20:50:16