2


1

WCFサービスオペレーションに送信されたパラメータを検証するために 検証アプリケーションブロック - エンタープライズライブラリを使用しています。 たとえば、特定の操作では、パラメータが1または6である必要があります。

[OperationContract(Name="GetEmployeesByRegion")]
[FaultContract(typeof(ValidationFault))]
リストGetEmployeesByRegion([DomainValidator(1,6)] int regionId);

これはうまく機能します。つまり、検証エラーが発生します。ただし、サービスがクライアントによって呼び出されると、汎用のSystem.ServiceModel.FaultExceptionがスローされます。 メッセージには、次のように示されます。_ "この障害の作成者は理由を指定していません。" _

これで、サービスを実行する前に自分でパラメータをチェックしてカスタムフォルトをスローすることができましたが、それはValidation Application Blockを使用した属性ベースのパラメータの検証の目的に反するようです。 検証Faultによって返されるエラーをカスタマイズする方法はありますか? 私は完全に悪いことをしている可能性もあります。 例外メッセージで1または6を渡したはずであることを発信者に認識させたいだけです。 これは可能ですか?

2 Answer


4


あなたが探しているすべてのメッセージを持っている障害内に存在するコレクションが実際にあります。

foreach(fault.Detail.Details内のValidationDetail詳細){... }


0


だからこれは古くからあるのですが、私は同じ問題を抱えていて答えを見つけました。

私にとっての問題は、[ValidationBehavior]を追加したことと、

attributes _after_私は自分のクライアントでサービスへの参照を作成しました。 機能させるためには、参照を更新する必要がありました。

確認するべき他のいくつかの可能な事柄:

1)これはEnterprise Library 6で修正されたバグです。 それについてはよくわかりませんが、同様の問題に対するEntLibのコード修正についての言及がいくつかあります。 最新バージョンのEntLibを使用していることを確認してください。

2)MessageTemplateの代わりに、ErrorMessageパラメータを検証エラーメッセージに使用しています。