David Wheeler (computer scientist) once said: “Any problem in computer science can be solved with another layer of indirection”. This is often mis-quoted with “abstraction” substituted for “indirection”. I think the main idea remains untouched. We in computer science use this pattern all the time. Most of widely used patterns are based in creating abstraction layers that hide the complexity of working with the overall system or architecture. These abstraction layers can be represented as generalized models or algorithms that hide the complexity of the specific implementations.
Well, that is exactly what we have done with the Managed Services Engine(MSE). A model was designed to represent useful business logic via endpoints which abstract (hide the complexity of implementation) business services available on the wire to the enterprise. Hiding the complexity of bindings, protocols, security, technology, etc… is priceless. In this model the model components can be managed centrally and introduce to a level of management that is consistent across the myriad of services. But representing today’s cloud of services is not enough, turning around and exposing these implementations in a totally new way with new attributes and behaviors is key to any enterprise to successfully adopt SOA and enable core business functions in a way that remains under control.
The MSE uses the intermediary pattern to achieve the decoupling of the client and the service implementation. This pattern has proven very successful for our service virtualization strategy to SOA. The components of this pattern are:
- Service Client – These are the consumers of the services
- Service Implementation – Specific service implementation. could be a Database, mainframe, web service (SOAP, REST, POX, etc…)
- Service Intermediary – This is our “Runtime Server”. This is the heart of the service virtualization strategy. Virtual Services are expose their Address, Binding and Contracts (ABC) thru the “Runtime Server”.
- Service Catalog – The metadata that describes the virtual and service implementations must be stored in catalog. there are two key components here: the Catalog database and the “Catalog Server”.
- Design Tools – An administration tool to help you manage the metadata would make everyone’s life easier. A WPF based tool that provides visibility across the whole model and exposes features that allow administrators to import metadata for various service implementations makes your life even easier.

Service Intermediary
The MSE’s Service intermediary implementation allows us to host virtual services by reading the metadata that describes what these services Address, Binding and Contracts (ABC). This intermediary sits between the Client and Service Implementations, thus providing a centrally available interception capabilities such as: Operation Versioning, protocol mapping, monitoring, routing, run-time policy enforcement and custom behaviors. The value add here is that neither the client or the Service Implementation needed to be touched in order to enable these capabilities.
If you are looking to adopt an Enterprise Service Layering approach a Service Oriented Infrastructure will provide a good framework for centralizing control, improved manageability and visibility.



