There is some debate on what an ideal web service interface would look like at my organization. The debate revolves around how to write our web service interface so that new methods do not break existing consumers.
Some people would have us write web methods like this:
// this is very granular
[WebMethod]
public int CreateClient(string clientName, string clientId, string address1, string address2){}
Others would have us write the method like this....
// this is very object oriented and less granular
[WebMethod]
public int CreateClient(ClientDocument clientToAdd){}
And others would have us write the method like this:
// this is very generic
[WebMethod]
public int CreateClient(string manifest, string payload){}
I think the only people that agree on the first example, are the architects that have never maintained code or written code for backward compatibility, so 90% of all the tech leads and developers do not dig the first approach.
The majority of the shop thinks the second approach is preferred because in the event that you need to add new methods, you just add them and redeploy the web service. Meanwhile, existing clients work the same and new clients consume the new method with the new foot print. I also beleive that we can base our services around an Interface and use the adapter pattern to create new functionality.
People that prefer the third approach are relying on the client passing in a proper manifest definition. The contents of the manifest variable would be used to load a factory that parsed the payload into business objects, and then delegated the work to a template method in the factory object. The template method of the factory object would invoke an xml reader and parse the payload and do the work. My personal opinion is that this puts too much weight on the consumer of the service, meaning that the consumer has to know too much about the method they are invoking.
So my personal feeling is that the second method is the way to go. Since everyone knows what opinons are like, i.e. everyone has one, I thought I would ping the users of my favorite forum and see how the other down to earth people handle versioning of web services.