これはばかげた質問のように感じますが、カスタム例外タイプをスローして処理するコンソール アプリがあります。なんらかの理由で、一般的な例外キャッチに陥っていますが、その理由はわかりません。
メインプログラム:
try
{
result = MyService.ExecuteSearch(paramItems);
}
catch (TimeoutException ex)
{
// Catch time out exceptions here
}
catch (SearchAnticipatedException ex)
{
// THIS IS WHERE I WANT TO BE WITH MY CUSTOM EXCEPTION & MESSAGE
}
catch (Exception ex)
{
// THE ORIGINAL EXCEPTION IS BEING CAUGHT HERE
}
私のロジックの主な根幹は EndpointNotFoundException をキャッチし、それをスローする代わりに、より意味のあるメッセージ (およびその他の情報) を使用してカスタム例外をスローしようとしています。ただし、代わりに、元の endpoingnotfoundexception がその Catch (Exception ex) ブロックで処理されています。
try
{
// do some logic
((IClientChannel)proxy).Close();
}
catch (CommunicationObjectFaultedException ex)
{
throw new SearchAnticipatedException(ServiceState.Critical, hostName, ex);
}
catch (EndpointNotFoundException ex)
{
throw new SearchAnticipatedException(ServiceState.Critical, hostName, ex);
}
finally
{
if (((IClientChannel)proxy).State == CommunicationState.Opened)
{
factory.Abort();
((IClientChannel)proxy).Close();
}
}
メインセクションの下部にある一般的な例外をコメントアウトすると、適切なブロックにキャッチされます-より具体的な例外に最初にキャッチされ、それらのいずれにも一致しない場合は、最後の一般的な種類のブロック。
うまくいけば、それは私が詰め込んだ小さなものです:)
私の例外クラスは次のようになります。
class SearchAnticipatedException : System.Exception
{
public int ServiceStateCode { get; set; }
public SearchAnticipatedException(MyService.ServiceState serviceState, string message, Exception innerException)
: base(message, innerException)
{
ServiceStateCode = (int)serviceState;
}
public static string FormatExceptionMessage(string message, MyService.ServiceState serviceState)
{
return serviceState.ToString().ToUpper() + SearchResult.CODE_MESSAGE_DELIMITER + message;
}
}