2014-03-30 44 views
0

我用FaultExceptions定義了一個WCF服務,但客戶端沒有正確捕獲異常。無法正確地從客戶端應用程序中捕獲FaultException <T>

爲異常的合同是:

[DataContract] 
public class ServiceFault { 
    [DataMember] 
    public string Operation { get; set; } 

    [DataMember] 
    public string Reason { get; set; } 

    [DataMember] 
    public string Message { get; set; } 
} 

操作

public interface IProductsService { 
    [OperationContract] 
    [FaultContract(typeof(ServiceFault))] 
    List<string> ListProducts(); 
} 

在操作我介紹了關於目的的錯誤:在客戶端應用程序

public List<string> ListProducts() { 
     List<string> productsList = null;// = new List<string>(); 

     try { 
      using (var database = new AdventureWorksEntities()) { 
       var products = from product in database.Products 
           select product.ProductNumber; 
       productsList.Clear(); // Introduced this error on purpose 
       productsList = products.ToList(); 
      } 
     } 
     catch (Exception e) { 
      throw new FaultException<ServiceFault>(new ServiceFault() { 
       Operation = MethodBase.GetCurrentMethod().Name, 
       Reason = "Error ocurred", 
       Message = e.InnerException.Message 
      }); 
     } 

     return productsList; 
    } 

然後,我抓到

catch (FaultException<ServiceFault> ex) { 
    Console.WriteLine("FaultException<ArgumentFault>: {0} - {1} - {2}", 
      ex.Detail.Operation, ex.Detail.Reason, ex.Detail.Message); 

} 
catch (FaultException e) { 
    Console.WriteLine("{0}: {1}", e.Code.Name, e.Reason); 
} 

但第二鎖銷被捕獲的錯誤,所以我得到這個消息,而不是(雖然正確不正確的形式)

InternalServiceFault: Object reference not set to an instance of an object 

我能做些什麼,使強類型的異常趕上錯誤?

PS:有一個類似的帖子,以這一點,但我不明白它

回答

1

你肯定e.InnerException不爲空,在Message = e.InnerException.Message

這將導致在服務調用中未處理的NullReferenceException因此拋出FaultException<ExceptionDetail>而不是FaultException<ServiceFault>

相關問題