2013-12-18 26 views
0

我需要知道什麼是WCF服務中異常處理的最佳模式。WCF中的異常處理模式,以防函數調用過多的其他函數拋出異常

[ServiceContract] 
public interface IAnasageServerService 
{ 
    [OperationContract(IsOneWay = false)] 
    [FaultContract(typeof(ServiceFaultData))] 
    FileConversionResponse ConvertDocument(FileConversionRequest request); 
} 
[DataContract] 
public class ServiceFaultData 
{ 
    [DataMember] 
    public string ErrorCode { get; set; } 

    [DataMember] 
    public string ErrorDetails { get; set; } 
    [DataMember] 
    public string LogDetails { get; set; } 
} 

「ConvertDocument」有很多調用遞歸函數的拋出異常。

我想要什麼: 我想知道哪個函數拋出此異常,但難度是由於recursiveness.i我無法報告其功能拋出此異常。

public static void convertDocument(List<AnasageServer.PagesTopics> PagesTopics) 
    { 

     try 
     { 
      Func1(); 
      Func2(); 
     } 
     catch (FaultException<AnasageServer.ServiceFaultData> serviceFaultData) 
     { 
      Logger.log(serviceFaultData.Detail.Details); 


      throw new Exception(" Conversion Failed! " + serviceFaultData.Detail.ErrorCode); 
     } 

我想將錯誤的詳細信息發送回客戶端。但由於遞歸性錯誤的細節被覆蓋,我無法報告哪個函數拋出這個異常。

更清楚了,請看。 this diagram

回答

1

捕捉異常時,附加原始異常作爲新拋出的內部異常。內部異常將保持原始堆棧跟蹤。

try 
{ 
    Func1(); 
    Func2(); 
} 
catch (FaultException<AnasageServer.ServiceFaultData> serviceFaultData) 
{ 
    Logger.log(serviceFaultData.Detail.Details); 

    throw new Exception(" Conversion Failed! " + serviceFaultData.Detail.ErrorCode, 
     serviceFaultData); 
}