4

私のSilverlightアプリケーションでは、さまざまなサーバーエラーを適切に処理したいと考えています。のハンドラーを作成しましDomainOperationExceptionたが、問題の根本原因に関するより具体的な情報を取得し、ユーザーにより明確なメッセージを提供したいと考えています。


これを行うための可能な方法:

  • OperationStatusいくつかの利点がありますが、それでもサーバーに接続されているほとんどすべてのエラーにOperationStatus.ServerErrorは、DBまたはIISの問題であるかどうかがあります。
  • 例外にもErrorCodeプロパティがありますが、RIAに適した可能性のあるエラーコードのリストをどこで入手できるかわかりません。

注:ErrorCodeサーバー側でDB接続の問題が発生した場合、自分で設定しなくても値は500になります。だからこそ、RIAがすべての汚い仕事をしていることを望んでおり、この冗長な努力を避けるつもりです。


質問:

  1. 適切に処理するための最良の方法は何 DomainOperationExceptionですか?
  2. 考えられるエラーコードはどこで入手できますか?
4

1 に答える 1

5

ErrorCodeユーザー定義の値です。MSDNはそれを述べています

この例外のカスタムエラーコードを取得または設定します。エラーコードは、任意のユーザー定義値にすることができます。

おそらくもっと洗練された解決策がありますが、私がやったことは、エラーコードで定義したポータブルクラスライブラリ(ただし、.sharedクラスも使用できます)を作成することです。enumサーバー側とクライアント側のプロジェクトでそのプロジェクトを参照しました。

次に、DomainServiceのメソッドを無効にして、次のOnErrorようなことを行いました。

 protected override void OnError(DomainServiceErrorInfo errorInfo)
 {
     if (errorInfo.Error is UnauthorizedAccessException)
     {
         errorInfo.Error = new DomainException("Denied access.",(int)MyErrorCodesEnum.Permission_Unauthorized, errorInfo.Error);
     }
 }

(このコードを見ると、例外タイプと列挙子の値の一種の連想リストを作成したいので、削除できifますが、アイデアは得られます)

クライアント側では、次のことを行います。

switch ((MyErrorCodesEnum)(s.Error as DomainException).ErrorCode)
{
    case MyErrorCodesEnum.Permission_Unauthorized:
        //do something
        s.MarkErrorAsHandled();
        break;
}
于 2012-06-19T20:53:21.180 に答える