WCF SOAP サービスでこれを行う正しい方法は、カスタム を使用することですErrorHandler
。これは、WIF を使用しているかどうかに関係なく当てはまります。
カスタム エラー ハンドラは を実装しIErrorHandler
ます。これにより、サービスは例外をスローできます。例外は、WCF によって登録済みのカスタム エラー ハンドラーに渡されます。これにより、例外を検査し、適切な障害を作成できます。
あなたの場合、おそらく SQL クライアントからの例外をスローするでしょう。適切な障害を作成するだけでなく、他の関連するアクションを実行することもできます (通常、エラーをログに記録するなど)。
上の 2 つの方法は次のIErrorHandler
とおりです。
ProvideFault(Exception error, MessageVersion version, ref Message fault)
これにより、スローされた例外を調べて、正しい障害を変更または作成できます。
と
HandleError(Exception error)
これは、応答がクライアントに返された後に呼び出されます。ここで、エラーのログ記録などを行うことができます。
これを実装する方法の詳細については、次の URL を参照してください。
http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/07/wcf-extensibility-ierrorhandler.aspx
エラー ハンドラは、上記のリンクのように、コードを使用して簡単に接続できます。少し余分な作業を行うだけで、カスタム サービス動作拡張機能を実装することで、web.config を使用して接続できます。これを行う方法の例は、次の場所にあります。
http://weblogs.asp.net/pglavich/archive/2008/10/16/wcf-ierrorhandler-and-propagating-faults.aspx
通常、SOAP サービスの場合、HTTP ステータス コード (つまり、503 ステータス) を直接返すことはありません。代わりに、エラーを a でラップして、FaultException
それを返します。
WCF REST の場合、 をスローするだけWebFaultException
で、組み込みのエラー ハンドラーがwebHttpBinding
HTTP エラーへの変換を処理します。
http://blogs.msdn.com/b/endpoint/archive/2010/01/21/error-handling-in-wcf-webhttp-services-with-webfaultexception.aspx