0

我有一个有两个 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 块没有捕获一些一般异常。这就是为什么我添加了第二个 catch 块。为什么会这样?为什么我的第一个 catch 块不能涵盖所有异常?


为什么会这样?为什么我的第一个 catch 块不能涵盖所有异常?

因为默认情况下,当没有为特定服务操作定义的任何故障契约时,非泛型FaultException将在服务端抛出(并且它将在客户端被捕获)。

4

2 回答 2

1

为什么会这样?为什么我的第一个 catch 块不能涵盖所有异常?

因为默认情况下,当没有为特定服务操作定义的任何故障契约时,非泛型FaultException将在服务端抛出(并且它将在客户端被捕获)。

于 2012-09-27T07:03:40.333 回答
0

异常类System.ServiceModel.FaultException 只能处理合同规定的故障

您的代码中应该有类似于下面的语句

throw new FaultException<DefaultFaultContract>(<parmaters>);

这导致异常由第一个 catch 块处理。当您没有合同规定的操作错误时,它将由通用 Exception 类(第二个 catch 块)处理,所有异常类型都从该类派生。

请检查此页面上给出的代码示例。 http://msdn.microsoft.com/en-us/library/ms576199.aspx

于 2012-09-27T07:12:18.583 回答