2

Validation Application Block - Enterprise Libraryを使用して、WCF サービス操作に送信されたパラメーターを検証しています。たとえば、特定の操作では、次のようにパラメーターを 1 または 6 にする必要があります。

[OperationContract(Name="GetEmployeesByRegion")]
[FaultContract(typeof(ValidationFault))]
List<Employees> GetEmployeesByRegion([DomainValidator(1,6)]int regionId);

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

これで、サービス キャルの前にパラメーターを自分でチェックしてカスタム エラーをスローすることができましたが、それは Validation Application Block を使用したパラメーターの属性ベースの検証の目的を無効にしているようです。検証フォールトによって返されるエラーをカスタマイズする方法はありますか? 私が完全に間違ったことをしている可能性もあります。呼び出し元に、例外メッセージで 1 または 6 を渡す必要があることを知ってもらいたいだけです。これは可能ですか?

4

2 に答える 2

4

実際には、障害内に存在するコレクションがあり、探しているすべてのメッセージが含まれています。

foreach (ValidationDetail detail in fault.Detail.Details)
{
   ...
}
于 2009-01-17T04:32:46.953 に答える
0

これは古いことですが、私は同じ問題を抱えていて、答えを見つけました。

私にとっての問題は、クライアントでサービスへの参照を作成したに[ValidationBehavior] および [FaultContract< ValidationFault>)] 属性を追加したことでした。それを機能させるために、参照を更新する必要がありました。

その他の確認事項:

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

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

于 2014-12-03T19:13:06.657 に答える