【C#】【WCF】WCF ~ 例外編[1] ~

■ 予期しない例外/予期される例外

http://msdn.microsoft.com/ja-jp/library/aa354510.aspx
より

【1】予期しない例外

 * 致命的なエラー:OutOfMemoryException など
 * プログラミング エラー:ArgumentNullException、InvalidOperationException など
クライアント側の例外ハンドリング
* WCF クライアントの通信メソッドを呼び出す際、
  通常は、予期しないエラーをクライアント側でキャッチしないこと

【2】予期される例外

 * TimeoutException
 * CommunicationException
 * CommunicationException の派生クラス
クライアント側の例外ハンドリング
try
{
    ...
    // 処理
    ...
    client.Close();
}
catch (TimeoutException exception)
{
    client.Abort();
}
catch (CommunicationException exception)
{
    client.Abort();
}

■ 主な例外

http://msdn.microsoft.com/ja-jp/library/ms789039.aspx
より

CommunicationObjectFaultedException

 * CommunicationObjectFaultedException がスローされるのは、
   アプリケーションが何らかの例外を認識しておらず、
   おそらく最初の例外をキャッチしたスレッド以外のスレッドで、
   既に Faulted 状態のオブジェクトを使用しようとしたため
例外のハンドリング
http://www.c-sharpcorner.com/uploadfile/ankithakur/exception-handling-in-wcf-using-fault-contract/
http://blogs.msdn.com/b/jjameson/archive/2010/03/18/avoiding-problems-with-the-using-statement-and-wcf-service-proxies.aspx

CommunicationObjectFaultedException

 * アプリケーションが別のスレッドからオブジェクトに対して
   Abort() を呼び出したときに、オブジェクトが既に Aborted 状態であるため、
   使用できなくなっていることを示しているため

■ 注意事項

 * 詳細な例外情報を、セキュリティ上の理由からクライアント側に公開しないこと。

参考文献

http://d.hatena.ne.jp/griefworker/20090901/wcf_exception