I have been using WSE 3.0 for a while now and I really like it. I really like the policy mechanism in the WSE, it affords me a kind of AOP (aspect orientated programming) that I am really starting to get into. For instance I have made a lot of SoapFilters recently, some handy, some just for tests, but each of them allow me to add an aspect of functionality into the webservice that I am creating in a configuration and not a design time. If I want security, just add a policy line in the XML config, if I want auditing another line, if I want exception shielding another line. All of these aspects of the system I am creating can be added at deployment time thus leaving my web service code clean and simple.
An example, pseudo code:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->[Webservice]public class OrderService{ [WebMethod] [Policy(ServerPolicy)] public OrderList SubmitOrders(OrderList input) { return OrderListRepository.InsertNewOrders(input); }}
And a policy file (not an actual file that would work in this example) would say:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/-->
<Policy> <add type="Security" MustHaveRole="Add"/> <add type="Auditing" /> <add type="ExceptionSheilding" /></Policy>
This service code and policy file model is so much cleaner and simpler than what you would have to write if you didn't have an AOP style policy system:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/-->
[Webservice]public class OrderService{ [WebMethod] [Policy(ServerPolicy)] public OrderList SubmitOrders(OrderList input) { try { if(User.IsInRole("Add") && User.IsAuthenticated) { OrderListRepository.InsertNewOrders(input); Log.Audit(Success); } else { Log.Error(SecurityError); } } catch(RepositoryException ex) { throw SheildedException(ex, "Problem in Repository"); } catch(Exception ex) { throw SheildedException(ex, "Unkown Exception"); } }}
Now tell me which code you would like to maintain! :)