2014-12-02 93 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