wcfnamespacesversioningcontracts

WCF - handle versioning


If I need to go from this service contract:

[ServiceContract(Namespace="http://api.x.com/Svc1")]
public interface IService1
{
   [OperationContract(Name = "AddCustomer")]
   bool AddCustomer(DTOCustomer1 customer);
}

to this:

[ServiceContract(Namespace="http://api.x.com/Svc1")]
public interface IService1
{
   [OperationContract(Name = "AddCustomer")]
   bool AddCustomer(DTOCustomer2 customer);
}

and according to this good article: Versioning WCF I understand that when data contract is changed there is a need of defining a new vs of data contract in new namespace followed by defining a new vs of service contract in new namespace, after which a new endpoint should be added.

How exactly am I suppose to have this done. Is there an example anywhere? Could you write something based on my service contract shown above?

Thank you in advance!


Solution

  • According to the linked article you should do something like:

    [ServiceContract(Namespace="http://api.x.com/Svc1")]
    public interface IServiceNew : IService1
    {
       [OperationContract(Name = "AddCustomerNew")]
       bool AddCustomer(DTOCustomer2 customer);
    }
    

    Then implement it in your service:

    public class MyCurrentServiceImplementation : IServiceNew 
    {...}
    

    You will need to redeploy your service but existing clients should be able to continue to call the AddCustomer operation, and new clients can call the AddCustomerNew operation.