Puisqu'il n'y a pas de solution prête à l'emploi et qu'il n'y a pas de réponse, je vais partager ce que j'ai implémenté. Je ne suis pas amoureux de l'approche mais ça marche pour moi.
Vue d'ensemble
L'approche de base est la page ASP.NET pour remplir une correspondance entre les propriétés des objets DataContract à la ClientId du contrôle qui est en cours de validation. Lorsqu'une erreur de validation se produit, ClientId est renvoyé du service à la page asp.net dans le cadre d'un FaultContract. Ensuite, les détails de l'exception FaultException sont extraits. la page ASP.NET récupère l'ID client du contrôle qui a provoqué l'erreur et une action appropriée peut être effectuée (par exemple, modifier l'apparence du contrôle et définir le texte sur un validateur).
Détails
Tous les objets DataContract héritent d'une classe de base qui expose un dictionnaire. Ce dictionnaire est utilisé pour mapper les propriétés d'objet aux contrôles ASP.NET. Dans le dictionnaire, la clé est le nom de la propriété sur l'objet DataContract et la valeur est l'ID client du contrôle. Avant d'appeler un service, le client doit attacher le dictionnaire à l'objet DataContract.
Lorsqu'un ValidationResult est créé par Enterprise Library, il contient une propriété appelée Target, qui est l'objet qui a été validé. ValidationResult contient également une propriété appelée key, qui est le nom de la propriété de l'objet cible qui a été validé. La clé ValidationResult est également une clé dans le dictionnaire qui a été définie dans la page ASP.NET avant d'appeler le service.
Avec la clé ValidationResult, les informations fournies ASP.NET (ClientId) peuvent être extraites de la cible ValidationResult. L'information est ensuite ajoutée en tant que Tag du ValidationResult. Malheureusement, Tag est une propriété en lecture seule, elle doit donc être définie en créant un nouveau ValidationResult et en transmettant la balise au constructeur.
La collection de ValidationResults est ensuite transformée en une collection CustomValidationResults préexistante (qui ressemble à ValidationResult) que nous devions utiliser. Les CustomValidationResults sont ensuite ajoutés à un objet ValidationFault personnalisé et une exception FaultException est générée.
Les valeurs ValidationFaults sont ensuite extraites de FaultException dans la page ASP.NET. ValidationFault contient le ClientId du contrôle associé à l'erreur afin que la page puisse choisir d'afficher les Messages comme bon lui semble.