As part of their Identity-based Web Services Framework (ID-WSF), the Liberty Alliance has defined a Discovery Service in their specifications and while there are hints of discovery type operations in other specifications there's nothing like the Liberty Discovery Service. Why is that?
To be honest, I don't know and I wouldn't mind hearing from those conversant in those protocols about how the missing piece is filled in.
Liberty developed the Discovery Service to answer some specific requirements that we had in our use cases. Those requirements included:
- The system must support a model where there are multiple providers of the same service. So, the protocols must support an environment where there are multiple providers Banking Services or Profile Services or any other service for that matter. This means that at run-time the clients must be able to locate the list of providers.
- The system must support, on a per-user basis, the specification of one or more particular providers of a given service. So, a user could have a single provider of Banking Services, but for each user that provider may be different.
- A client developed to utilize a given service will work interchangeably in system environments where there are single or multiple providers of the same service. So a developer of a client can be confident that their client will be able to participate in the system whether the system has a single or multple providers of the same service and the set of providers can change without impacting the client.
The other discovery type protocols are available, such as WS-Discovery or UDDI, don't provide this type of functionality at all. Some say that UDDI could be extended to support it, but I still think that UDDI isn't/wasn't intended for this type of operation -- it was more intended to publish WSDLs for generally available services.
So Liberty created its own Discovery Service and in doing so, we have found that the Discovery Service also provides a very powerful service to Web Service Consumers (WSCs) - matching the capabilities and interests of the client to the capabilities and requirements of the service providers.
When a WSC invokes the Discovery Service, it provides the Discovery Service with a list of its capabilities (such as which service it wants to talk to, which versions of the service protocols the client can speak, which security mechanisms the client can support, etc., etc.) and the Discovery Service matches the specified capabilities with the registered requirements of the service provider(s) who provide that service for the user. The Discovery Service then returns to the WSC an Endpoint Reference which gives the WSC all it needs to know to directly invoke the Service Provider's interfaces without need for further negotiation.
This is probably the strongest benefit of the discovery service, dramatically reducing the number of messages sent by the WSC setup the first call to a service provider.
If you look at the other web services protocols out there, this process either requires a substantial amount of built-in knowledge in the client -- something we all know is bad -- or the process requires a substantial amount of negotiation between the WSC and the various providers of service until the WSC finds a match with its capabilities.