2014-12-02 3 views
0

У меня есть несколько вопросов:Как справиться с обработкой исключений в wcf?

  1. это нужно использовать попытку поймать во всех слоях ФОС службы
  2. у меня есть простая многоуровневая служба ФОС:

и определение:

[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

Нужно ли использовать try catch во всех слоях службы WCF?

Нет - вы должны обрабатывать только исключения, когда вы можете сделать что-то о нем (обрабатывать его, зарегистрировать ее и т.д.)

Как избежать повышения сообщения об ошибке в моем уровне услуг и отправить клиенту ?

Что вы должны вернуть, если есть исключение? Как еще вы могли бы сообщить клиенту, что произошло что-то неожиданное? Возврат null для «продукта не найден» кажется подходящим, но если есть более глубокая проблема, я бы подумал, что вы хотите, чтобы это исключение вышло из строя (или, по крайней мере, зарегистрировало его), и сообщило клиенту, что произошло что-то плохое. Сколько деталей вы хотите позволить пузыриться до вас.

+0

Как и в каком слое мы можем использовать try catch для обработки исключений базы данных, например, невозможно подключиться к базе данных? –