【问题标题】:Pattern of exception handling in WCF in case of function having calls to too much other functions throwing ExceptionsWCF 中的异常处理模式,以防函数调用太多其他抛出异常的函数
【发布时间】:2013-12-18 14:23:36
【问题描述】:

我需要知道 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”调用了更多抛出异常的递归函数。

我想要什么: 我想知道哪个函数抛出了这个异常,但困难是由于递归性。我无法报告哪个函数抛出了这个异常。

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);
        }

我想将错误详细信息发送回客户端。但是由于递归错误细节被覆盖,我无法报告哪个函数抛出了这个异常。

更清楚,请看.

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    捕获异常时,将原始异常附加为新抛出的内部异常。内部异常将保留原始堆栈跟踪。

    try
    {
       Func1();
       Func2();
    }
    catch (FaultException<AnasageServer.ServiceFaultData> serviceFaultData)
    {
        Logger.log(serviceFaultData.Detail.Details);
    
        throw new Exception(" Conversion Failed! " + serviceFaultData.Detail.ErrorCode,
            serviceFaultData);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 2022-07-27
      相关资源
      最近更新 更多