私のサービスのOperationContractの主なパラメーターは、Preapprovalと呼ばれるクラスです。Preapprovalクラスには、DataMember属性のパブリックゲッター/セッターがいくつかあります。セッターへの入力を検証するコードがあります。たとえば、パラメーターが空白であるか、ドメインの適切な範囲外である場合、ArgumentExceptionをスローします。
入力が無効な場合、私は通常、ここでArgumentExceptionをスローします。これはWCFの状況であるため、ここでArgumentExceptionではなく事前定義されたFaultExceptionをスローする必要がありますか?他の場所では、一般的な例外をキャッチして、FaultExceptionsとして再スローする可能性があることを理解していますが、このアクティビティは、WCF配管によって自動的に実行される一部の作業で、スタックの上位で発生します。
たとえば、呼び出し元が私のサービスを呼び出すと、シリアライザーはSOAPを逆シリアル化し、オブジェクトのセッターを呼び出そうとし、実際に操作が呼び出される前にArgumentExceptionがスローされます。したがって、DataContractクラスで、FaultExceptionsをすぐにスローするのは良い設計手法ですか?カスタムハンドラーをチャネルディスパッチャーに接続したくありません。
単純にFaultExceptionsを直接スローできることは理解していますが、そのようなことをサービスに限定したいと思います。避けられない場合は、サポートクラスでもできますが、System.ServiceModelなどとあまり密接に結びついていない典型的なコードをできるだけ書きたいと思います。
ありがとう!