2016-01-13 51 views
0

我試圖在我的WCF服務中創建FaultException,以便我可以在我的WPF應用程序中顯示錯誤。我遇到的問題是FaultException仍然顯示/崩潰到我的服務,並不想在我的WPF應用程序(在消息框中)顯示錯誤。WPF應用程序中的FaultException仍然會引發WCF服務中的錯誤

這裏是我的編碼:

服務

public void AddNewSupplier(SupplierData Data) 
{ 
    using (Database db = new Database()) 
    { 
     var supplier = new Supplier 
     { 
      Name = Data.Name, 
      Address = Data.Address, 
      ContactNumber = Data.ContactNumber, 
      Description = Data.Description, 
      Terms = Data.Terms 
     }; 
     if (db.Supplier.Any(sup => supplier.Name.Contains(sup.Name))) 
     { 
      throw new FaultException(new FaultReason("The database already contains the name " + supplier.Name + ". Please enter a diffirent name"), new FaultCode("Multiple Items")); 
     } 
     else 
     { 
      db.Supplier.Add(supplier); 
      db.SaveChanges(); 
     } 
    } 
} 

客戶端應用

private void btnAdd_Click(object sender, RoutedEventArgs e) 
{ 
    using (MKCServiceClient service = new MKCServiceClient()) 
    { 
     try 
     { 
      service.AddNewSupplier(new SupplierData 
      { 
       Name = txtName.Text, 
       Address = txtAddress.Text, 
       ContactNumber = txtContactNumber.Text, 
       Description = txtDescription.Text, 
       Terms = txtTerms.Text 
      });     
     } 
     catch (FaultException fe) 
     { 
      if (fe.Code.Name == "Multiple Items") 
       MessageBox.Show(fe.Reason.ToString()); 
     } 
    } 
} 

什麼可能我是做錯了什麼?

+1

如果異常在服務器端邏輯中處於「未處理」狀態,WCF異常將只會出現在線上。所以,如果你有父級別的話,嘗試/抓住它也需要重新拋到客戶端 – pnm

+0

感謝您的評論! @pnm - 家長級別嘗試/趕上?在我的'AddNewSupplier'方法中沒有其他嘗試和捕獲,並且我的應用程序中唯一的try/catch工作正常,但* service *異常仍然首先被拋出,甚至不應該拋出。 – CareTaker22

+0

您的服務異常是否向客戶提供?是的,它可能會包裝你的錯誤例外。檢查服務異常的InnerException屬性。 – pnm

回答

0

您可以將斷點放在Catch(...)區域中嗎? fe.Code.Name財產的實際價值是多少?

+0

讓我快速檢查;) – CareTaker22

+0

好的,所以當我在'fe.Code.Name'處放置斷點時,它會在我的服務中拋出錯誤,然後在我的應用程序中打開'MessageBox.Show',但是當我刪除斷點,它引發我的服務中的異常,並由於某種原因卡在'else'中,並且不通過所有代碼運行... – CareTaker22

+1

嘗試將Catch(...)中的FaultException類型更改爲異常類型。也許還有一個例外? – smq93

相關問題