我遇到了与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块中,但它不会出现。
答案 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
}