From the client's point of view, discovery is about finding services. From the service's point of view, discovery is about publishing location and other information about the service. What information does a server need to publish in order to meet a client's needs?
At the bare minimum, a WSDL document must correctly format messages for a service, and often can include the location of the service. Technically speaking, this is probably the only thing that is absolutely required for a WSDL to be complete.
This information must be present in some form. At runtime, it can be advantageous to find the location, so as not to be bound to a single location as found in a WSDL.
Contact and Service API Documentation—
Although not technically required, some level of documentation for a service's API probably should explain how to use the service correctly. In case the documentation is inadequate or missing, a person to contact usually is required as well.
This is not required, but it certainly is useful. If you were wading through thousands of services on your company's internal network just to find one that does tax calculations from the SAP system, then it would be nice to be able to filter your search down to a category such as "Tax" services.
Without any specifications or protocols, we can build an ad hoc system for finding Web services that provides this kind of information. To do so, we can use .NET's database classes, and Web pages along with Web services for interacting with the data.