我的代码函数有两个catch块。我发布了以下代码:
public void UpdateGroup(String strSiteID, String strGroup, int row)
{
try
{
Console.WriteLine("UpdateGroup");
Excel1.MWMClient.MWMServiceProxy.Group group = new Excel1.MWMClient.MWMServiceProxy.Group();
group.name = "plumber";
group.description = "he is a plumber";
Console.WriteLine(groupClient.UpdateGroup(strSiteID, group));
ExcelRecorder(0, null, null, row);
}
catch (System.ServiceModel.FaultException<DefaultFaultContract> ex)
{
ExcelRecorder(ex.Detail.ErrorCode, ex.Detail.Message, ex.Message, row);
}
catch (Exception ex)
{
ExcelRecorder(0, "", ex.Message, row);
}
finally
{
System.GC.Collect();
}
}
我认为第一个catch块足以捕获我的代码中可能出现的所有可能异常。但我注意到,有时,第一个捕获块没有捕获一些常规异常。这就是为什么我添加了第二个catch块。为什么会这样?为什么我的第一个捕获块不能涵盖所有异常?
答案 0 :(得分:1)
为什么会这样?为什么我的第一个挡块不能覆盖全部 异常?
因为默认情况下,当没有为特定服务操作定义的任何错误契约时,非泛型FaultException
将在服务端抛出(并且它将在客户端捕获)。
答案 1 :(得分:0)
异常类System.ServiceModel.FaultException
只能处理合同规定的错误
您的代码中应该有类似下面的陈述
throw new FaultException<DefaultFaultContract>(<parmaters>);
导致异常由第一个catch块处理。 如果没有按合同规定的操作错误,它将由通用的Exception类(第二个catch块)处理,从中派生所有异常类型。
请检查此页面上提供的代码示例。 http://msdn.microsoft.com/en-us/library/ms576199.aspx