2014-12-02 109 views
0

我有一些問題:如何在wcf中做異常處理?

  1. 它需要使用嘗試捕捉在
  2. 我簡單分層WCF服務WCF服務的所有層:

,並定義:

[DataContract] 
    public class ProductFault 
    { 
     public ProductFault(string msg) 
     { 
      FaultMessage = msg; 
     } 
     [DataMember] 
     public string FaultMessage; 
    } 

並且具有:

 public Product GetProduct(int id) 
     { 
      ProductBDO productBDO = null; 
      try 
      { 
       productBDO = productLogic.GetProduct(id); 
      } 
      catch (Exception e) 
      { 
       string msg = e.Message; 
       string reason = "GetProduct Exception"; 
       throw new FaultException<ProductFault> 
       (new ProductFault(msg), reason); 
      } 
      if (productBDO == null) 
      { 
       string msg = 
       string.Format("No product found for id {0}", 
       id); 
       string reason = "GetProduct Empty Product"; 
       throw new FaultException<ProductFault>(new ProductFault(msg), reason); 
      } 

      Product product = new Product();//**** 
      TranslateProductBDOToProductDTO(productBDO, 
      product); 
      return product; 
     } 

當我通過無效id爲「GetProduct」的方法我收到此錯誤信息:image

如何避免在我的業務層提高錯誤信息併發送至客戶端?

回答

0

我是否需要在所有層的WCF服務中使用try catch?

沒有 - 你應該只處理異常的時候可以做一些事情(處理它,記錄它,等)

如何避免在我的業務層提高錯誤信息併發送至客戶端?

如果發生異常,應該返回什麼?你還會如何讓客戶知道發生了意想不到的事情? 「產品未找到」返回null似乎是合適的,但如果有更深層次的問題,我認爲你會希望這個例外起泡(或至少記錄下來),並讓客戶知道發生了不好的事情。你想允許多大程度的細節取決於你。

+0

如何以及在哪一層我們可以使用try catch來處理數據庫異常,例如無法連接到數據庫? – 2014-12-03 02:28:43