处理WCF服务中DLL中生成的异常

时间:2013-08-28 07:37:39

标签: .net wcf exception

我遇到了与WCF服务中的异常处理相关的问题。拜托,任何人都可以帮助我。

我的问题: -

我正在为移动应用程序开发WCF服务。在我的WCF服务中,我有一个类库项目,其中有一个类A.在该类中,我定义了一个方法,它从webconfig文件的appsetting块获取一些值(对于ex 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块中,但它不会出现。

1 个答案:

答案 0 :(得分:0)

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

说实话,我认为你在这里使用try-catch块是出于错误的原因。您可以轻松地检查返回的值,看它是否为空或没有所有try catch代码的null。 ConfigurationManager.AppSettings返回一个字符串 - 在其上调用.ToString()是redudant(但如果该项不存在,则会得到一个空引用异常)。

我会用这种方式重写你的代码:

public static string Method() 
{

    return ConfigurationManager.AppSettings["UserID"];
}

然后在你的WCF代码中:

string userID = ClassA.Method();

if (String.IsNullOrEmpty(userID))
{
    // Do something with the error here
}