开发者

Validating parameters with WCF, Unity and VAB

开发者 https://www.devze.com 2023-02-16 05:22 出处:网络
I am developing an application that exposes a WCF service using the Message/Response pattern for service methods.The application is using Unity 2.0 for dependency injection and the Validation Applicat

I am developing an application that exposes a WCF service using the Message/Response pattern for service methods. The application is using Unity 2.0 for dependency injection and the Validation Application Block from MS Patterns & Practices. I've already gotten Unity tied into WCF using a custom HttpModule I picked up from several website a while back and everything works great.

In my service interface I have a method such as: DoSomethingResponse DoSomething(DoSomethingRequest request)

I can easily attach VAB attributes to the service contract to verify that 'request' is never null but I also want to validate the contents of the request object.

To do this, I inject the validator into the DoSomethingRequest constructor and include an internally scoped IsValid property which handles interacting with the VAB validator. Unfortunately, this constructor doesn't get called because WCF deserializes the object and constructors aren't used.

Without getting into the merits of having the request object be a simple DTO versus having some serve开发者_如何学运维r-side business logic, is there a way to cleanly inject dependencies into an object passed into WCF service as an argument?


If I'm understanding your issue correctly, you have properties on DoSomethingRequest that are instances of some other classes (data contracts) and you want to validate your data contracts as well? Is there some reason you can't just apply validation attributes to your data contract classes as well? This is the approach I've used when using WCF with VAB integration and it's worked out quite nicely.


So it turns out that adding the validation attributes to my DataContract actually works with no additional code. Unfortunately, it doesn't work if validation is defined in the app's config file (app.config or web.config).

As a result, I've stripped out the constructor injection and IsValid property on my DataContract (request object) which makes it more of an annotated DTO which I think is preferred anyway. I only wish that it would work the same with the XML configuration.

0

精彩评论

暂无评论...
验证码 换一张
取 消