0

我面临与 WCF 服务中的异常处理相关的问题。请任何人都可以帮助我。

我的问题: -

我有我正在为移动应用程序开发的 WCF 服务。在我的 WCF 服务中,我有一个类库项目,其中有一个 A 类。在该类中,我定义了一个方法,该方法从 webconfig 文件的 appsetting 块(例如 UserID)中获取一些值。

如果我忘记在 webconfig 中定义该设置,则异常将出现在该方法的 try catch 块中。(在这一步一切都很好)但理想情况下,该异常也应该进入我正在调用的相应 WCF 服务方法的 catch 块中那个A类方法。

在我的情况下,这件事并没有发生。我提供以下代码以供参考

用 ClassA 编写的代码(放在类库项目中)

public static string Method()
{
    try
    {
        string strdata = ConfigurationManager.AppSettings["UserID"].ToString();
        return strdata;
    }
    catch (Exception e1)
    {
        throw e1;
    }
}

用 WCF 服务编写的代码:-

try
{
   ClassA.Method();
}
catch (Exception e2)
{

}

在上面的代码中,如果我忘记在 webconfig 文件中定义 UserID 设置,那么异常也应该进入 WCF 服务方法的 catch 块,但它不会发生。

4

1 回答 1

0

我不确定为什么它没有出现在 WCF 代码中,但是通过使用throw e1你会丢失错误的堆栈跟踪,这通常被认为是一件坏事。

老实说,我认为您在这里使用 try-catch 块是出于错误的原因。您可以轻松地检查返回的值以查看它是否为空或 null,而无需所有 try catch 代码。 ConfigurationManager.AppSettings返回一个字符串 - 调用.ToString()它是多余的(尽管如果该项目不存在,您将得到一个空引用异常)。

我会这样重写你的代码:

public static string Method() 
{

    return ConfigurationManager.AppSettings["UserID"];
}

然后在您的 WCF 代码中:

string userID = ClassA.Method();

if (String.IsNullOrEmpty(userID))
{
    // Do something with the error here
}
于 2013-08-29T06:41:49.873 回答