0

2 つの 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 ブロックがいくつかの一般的な例外をキャッチしていないことがあります。そのため、2 つ目の catch ブロックを追加しました。なぜそれが起こっているのですか?最初の catch ブロックですべての例外をカバーできないのはなぜですか?


まず、Eclipse 用の Android Development Tools (ADT) プラグインをダウンロードする必要があります。http://developer.android.com/tools/sdk/eclipse-adt.htmlを参照してください。

また、役立つと思われるステップバイステップのチュートリアルへのリンクは次のとおりです

それが役立つことを願っています。:)

4

2 に答える 2

1

なぜそれが起こっているのですか?最初の catch ブロックですべての例外をカバーできないのはなぜですか?

デフォルトでは、特定のサービス操作に対して定義されたフォールト コントラクトがない場合、非ジェネリックFaultExceptionがサービス側でスローされるためです (そしてクライアント側でキャッチされます)。

于 2012-09-27T07:03:40.333 に答える
0

例外クラスSystem.ServiceModel.FaultException は、契約上指定されたフォルトのみを処理できます

コードに以下のようなステートメントが含まれている必要があります

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

これにより、最初の catch ブロックによって例外が処理されます。契約上指定された操作エラーがない場合、すべての例外タイプが派生するジェネリック Exception クラス (2 番目の catch ブロック) によって処理されます。

このページに記載されているコード サンプルを確認してください。 http://msdn.microsoft.com/en-us/library/ms576199.aspx

于 2012-09-27T07:12:18.583 に答える