8

サーバーに次のコードがあります。

if (actualRowCount > maxRows)
{
    throw new DomainException("OverMaxRowLimitException",
        new OverMaxRowLimitException(string.Format(MaxRowsMessage,
        actualRowCount, maxRows)));
}

これによりDomainExceptionInnerExceptionプロパティ セットで新しい が作成されます。これがデバッガーで設定されていることを確認しました。

カスタム例外は次のように定義されます。

public class OverMaxRowLimitException : Exception
{
    public OverMaxRowLimitException(string message)
    {
        this.Message = message;
    }

    public new string Message { get; set; }
}

これは、行が多すぎることをユーザーに知らせることができるように、適切なエラー メッセージをクライアントに返すことになっています。そのため、ロード完了ハンドラーには次のものが必要です。

if (result.HasError)
{
    ShowError(result.Error.InnerException.Message);
}

残念ながら、InnerException物件はnullです。したがって、チェックする必要があるのは、クライアントに適切に転送されていない外側の例外メッセージのテキストだけです。

私が必要とすることが提案されています:

<customErrors mode="Off" />

Web構成ファイルで。私はこれを試しましたが、うまくいきません。

また、次のものが必要であることが示唆されています。

[KnownType(typeof(OverMaxRowLimitException))]

データ契約について。これを間違った場所に配置しない限り、これも機能しません。

また、カスタム例外に追加[Serializable]して、それを一般的なものに置き換えてみましたException。これらのどちらも機能しませんでした。

では、なぜInnerExceptionプロパティが null なのですか。私は何が欠けていますか?

4

1 に答える 1

0

私はあなたが使用する必要があると思います

[FaultContract(typeof(OverMaxRowLimitException))]

このためのあなたの運用契約のために。そして、あなたOverMaxRowLimitExceptionはシリアライズ可能でなければなりません。

また、使用法では、例外をスローする適切な方法は、を使用することだと思います

throw new FaultException<OverMaxRowLimitException>(yourException);

于 2013-01-28T14:07:18.630 に答える