4

エラー報告が組み込まれた消費者を対象としたこのアプリケーションがあります。the remote name could not be resolved たとえば、google.com などのホスト名の例外に関するエラー レポートが表示されることがあります。これは明らかに私のアプリケーションの問題ではなく、ユーザー側の問題です。

私のアプリケーションで、特定の例外を分類し、エラー レポートを送信する代わりに、ユーザーに特定のことを確認するように提案するダイアログを表示するにはどうすればよいですか。また、ユーザーが .NET フレームワークのインストールをローカライズしたという事実も考慮に入れます。(彼らの言語でのエラー メッセージ)

編集:SQLExceptionから分離することは実際には問題ではありません。たとえば、 WebExceptionからWebExceptionタイプの WebException を判別する方法です。remote name could not be resolvedThe operation has timed-out

4

4 に答える 4

2

WebException の場合、エラーが HTTP エラー (例: 404) であるか、「Status」プロパティを使用していないかを判断できます。

catch (WebException ex)
{
    if (ex.Status != WebExceptionStatus.ProtocolError)
       // in this case it was probably a connection issue
}

WebExceptionStatus 列挙の詳細については、こちらを参照してください

于 2012-06-13T20:00:01.757 に答える
1

エンタープライズライブラリの例外処理アプリケーションブロックを確認することを強くお勧めします。

于 2012-06-13T17:46:02.783 に答える
0

可能な場合はタイプごとに例外 (および必要に応じて内部例外) をキャッチする OR 十分に具体的に入力されていない場合は、さらにメッセージまたはその他の例外の詳細 (エラー コード/番号/など) を確認します THEN 正しいユーザーをトリガーして、このケースを適切に処理します-ダイアログに直面しています。

関数の擬似コード:

public UserError DoStuff()
{
 try
 {
  // some web code
  // some sql code
 }
 catch (WebException webEx)
 {
   if (webEx.Message.Contains("SSL"))
   {
     return new UserError { Type = ErrorType.SSL };
   }

   return new UserError { Type = ErrorType.Web };
 }
 catch (SqlException sqlEx)
 {
    return new UserError { Type = ErrorType.SQL };
 }
}
于 2012-06-13T17:06:09.450 に答える
0

複数の catch ブロックで try/catch ステートメントを使用したい場合:

try { ... connect... }
catch(SocketException ex) { 
  switch(ex.ErrorCode)
  {
    case 123: ....
    default: ....
  }
}
catch(WebException ex) { 
  if(ex.InnerException is SocketException)
  {
    switch(((SocketException)ex.InnerException).ErrorCode)
    {
      case 123: ....
      default: ....
    }
  }
  switch(ex.Status)
  {
    case 500: ....
    default: ....
  }
}
....
catch(Exception ex) { .... something unforeseen, send error report .... }

基本的に、これらの例外のそれぞれには、文字列比較に依存せずにチェックできるプロパティに追加情報が含まれている必要があります。

于 2012-06-13T17:04:29.737 に答える