【问题标题】:How to convert System.Exception into FaultException如何将 System.Exception 转换为 FaultException
【发布时间】:2016-02-09 11:51:44
【问题描述】:

我有以下异步调用的方法。我想知道如何将System Exception(我可能在SQL 操作期间遇到)转换为FaultException

方法如下:

public List<Product> GetProductDetails(int productKey)
{
    try
    {
        using (SqlConnection con = new SqlConnection(_connectionString))
        {
            SqlCommand cmd = new SqlCommand("usp_Get_ProductDetails", con);
            ........
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    ......
                }
            }
        }
    }
    catch(Exception ex) 
    {
        //How can I convert this Exception ex into FaultException and then throw to client?
        //throw new FaultException(new FaultReason(new FaultReasonText()), new FaultCode());

    }
}

【问题讨论】:

标签: c# wcf exception-handling


【解决方案1】:

您可以捕获多个异常(事实上,如果有可能发生给定的异常,这样做是一种很好的做法),然后对每个异常进行处理。

例如:

try
{
    using (SqlConnection con = new SqlConnection(_connectionString))
    {
        SqlCommand cmd = new SqlCommand("usp_Get_ProductDetails", con);
        .....
    }
}
catch(FaultException faultEx)
{
    // code to send to client
}
catch(Exception ex) 
{
    // code to do something else
}

【讨论】:

  • try 中的代码不应该与FaultException 相同。
  • @HumaAli 这完全取决于您在何处以及如何使用该方法,它是在控制器、模型还是其他地方?我只是在回答给出的问题。
  • @Steve 我只是想知道在捕获到 FaultException 消息后如何发送它
  • @AmitKumarGhosh 为了简洁起见,我从原始示例中删除了代码。他的代码很可能会抛出该异常。
  • 如果您希望抛出 FaultException 但要捕获其他异常,则在 FaultException 的 catch 块中使用 throw;。如果您没有合理预期(或无法有效应对)任何其他异常,那么根本就没有try
【解决方案2】:
catch(Exception ex) 
{
    throw new FaultException(ex.Message);
}

【讨论】:

  • 抛出一个新的异常实例是不好的做法,因为你会丢失整个堆栈跟踪到那时:stackoverflow.com/questions/2999298/…
  • @Markus 这没有包装异常,只是消息,所以它确实丢失了。当然,有时人们希望 准确地 丢失堆栈跟踪。在这种情况下,虽然它与最初抛出的 FaultException 不同,但没有多大意义。
  • 好吧,我认为这是 OP 关注的错误消息。我知道堆栈跟踪丢失等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 2010-09-08
相关资源
最近更新 更多