What’s the best way to handle adding a new (optional) parameter to an existing operation without requiring the client to update their WSDL? I do not want to update the namespace to describe a new version of the service contracts, since this should be backwards compatible with older clients.
Should I add a new operation with a new parameter, as an overload? Or should I just add the parameter to the existing operation?
Here is my operation:
[OperationContract]
MyResponse GetData();
Should it be:
[OperationContract]
MyResponse GetData();
[OperationContract]
MyResponse GetData(string filter);
Or more simply, just change it to this:
[OperationContract]
MyResponse GetData(string filter);
The latter option seems best, and according to my reference book, “The impact on client is none. New parameters are initialized to default values at the service.” Is WCF initializing it to the the so-called default value? If so, what is the default value?
One thing to take into consideration is that you can’t have two OperationContracts with the same name. The way it’s serialized it will throw an error.
The best approach is to go with Option 3 (just adding the new parameter) and within the method logic account for it being a null value for those clients that haven’t updated yet. If it’s a breaking change that the clients will need to update for, make sure to not have the entire application die because of the exception.