Проверка параметров с помощью WCF, Unity и VAB - PullRequest
0 голосов
/ 10 марта 2011

Я разрабатываю приложение, которое предоставляет службу WCF, используя шаблон сообщения / ответа для методов службы. Приложение использует Unity 2.0 для внедрения зависимостей и блок приложения проверки из MS Patterns & Practices. Я уже подключил Unity к WCF с помощью пользовательского модуля HttpModule, который я недавно обнаружил на нескольких веб-сайтах, и все отлично работает.

В моем интерфейсе сервиса у меня есть такой метод: DoSomethingResponse DoSomething (запрос DoSomethingRequest)

Я могу легко прикрепить атрибуты VAB к контракту на обслуживание, чтобы убедиться, что «запрос» никогда не является нулевым, но я также хочу проверить содержимое объекта запроса.

Для этого я внедряю валидатор в конструктор DoSomethingRequest и включаю свойство IsValid с внутренней областью действия, которое обрабатывает взаимодействие с валидатором VAB. К сожалению, этот конструктор не вызывается, потому что WCF десериализует объект, а конструкторы не используются.

Если не использовать преимущества объекта запроса в виде простого DTO по сравнению с некоторой бизнес-логикой на стороне сервера, есть ли способ аккуратно внедрить зависимости в объект, передаваемый в службу WCF в качестве аргумента?

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

Получается, что добавление атрибутов проверки в мой DataContract действительно работает без дополнительного кода.К сожалению, это не работает, если проверка определена в конфигурационном файле приложения (app.config или web.config).

В результате я удалил инъекцию конструктора и свойство IsValid в свой DataContract(объект запроса), что делает его более аннотированным DTO, который я считаю предпочтительным в любом случае.Я только хотел бы, чтобы это работало так же с конфигурацией XML.

0 голосов
/ 10 марта 2011

Если я правильно понимаю вашу проблему, у вас есть свойства в DoSomethingRequest, которые являются экземплярами некоторых других классов (контракты данных), и вы также хотите проверить свои контракты данных? Есть ли какая-то причина, по которой вы не можете просто применить атрибуты проверки к своим классам контрактов данных? Это подход, который я использовал при использовании WCF с интеграцией VAB, и он отлично сработал.

...