2011-03-10 2 views
0

Je développe une application qui expose un service WCF en utilisant le modèle Message/Réponse pour les méthodes de service. L'application utilise Unity 2.0 pour l'injection de dépendance et le bloc d'application de validation de MS Patterns & Practices. J'ai déjà eu Unity lié à WCF en utilisant un HttpModule personnalisé que j'ai récupéré sur plusieurs sites il y a quelques temps et tout fonctionne très bien.Validation des paramètres avec WCF, Unity et VAB

Dans mon interface de service que j'ai une méthode telle que: DoSomethingResponse DoSomething (Demande DoSomethingRequest)

Je peux facilement joindre VAB attribue au contrat de service pour vérifier que « demande » est jamais nulle, mais je veux aussi valider le contenu de l'objet de requête. Pour ce faire, j'injecte le validateur dans le constructeur DoSomethingRequest et inclue une propriété IsValid portée en interne qui gère l'interaction avec le validateur VAB. Malheureusement, ce constructeur n'est pas appelé car WCF désérialise l'objet et les constructeurs ne sont pas utilisés. Sans vouloir faire de l'objet requête un simple DTO par rapport à une logique métier côté serveur, est-il possible d'injecter proprement des dépendances dans un objet passé dans le service WCF en tant qu'argument?

Répondre

0

Il s'avère donc que l'ajout des attributs de validation à mon DataContract fonctionne réellement sans code supplémentaire. Malheureusement, cela ne fonctionne pas si la validation est définie dans le fichier de configuration de l'application (app.config ou web.config). Par conséquent, j'ai supprimé l'injection de constructeur et la propriété IsValid sur mon DataContract (objet de requête), ce qui le rend plus d'un DTO annoté que je pense de toute façon préféré. Je souhaite seulement que cela fonctionne de la même manière avec la configuration XML.

0

Si je comprends bien votre problème, vous avez des propriétés sur DoSomethingRequest qui sont des instances de certaines autres classes (contrats de données) et vous voulez également valider vos contrats de données? Y a-t-il une raison pour laquelle vous ne pouvez pas simplement appliquer des attributs de validation à vos classes de contrat de données? C'est l'approche que j'ai utilisée lors de l'utilisation de WCF avec l'intégration de VAB et ça a très bien fonctionné.

+0

Pas exactement. DoSomethingRequest est un DataContract. Je souhaite valider ses DataMembers avant de prendre d'autres mesures. Essentiellement, dans ma méthode de service, j'appelle request.IsValid pour déterminer si je devrais effectuer l'opération demandée. IsValid requiert une instance du validateur qui serait normalement injectée dans le constructeur. – SonOfPirate

Questions connexes