2010-04-21 3 views
1

У меня есть два метода в службе Icontact и wcf, я хочу использовать один метод для нового требования. и хотите, чтобы существующие клиенты вызывали старый код. и новый клиент для вызова нового измененного метода и существующего метода для обратной совместимости.WCF Versioning restful way problem

код:

[ServiceContract(Namespace = "http://www.testk.com/1/11", Name = "cService")] 
public interface ICService 
{ 
    [OperationContract(Name="GetWorkingDetails")] 
    void GetWorkingDetails(int a); 

    void GetList(int a); 
} 

//service Implementation 
public class MyService : ICService 
{ 
    [WebGet] 
    void GetWorkingDetails(int a) 
    { 
    //// 
    } 

    [WebGet] 
    void GetList(int a) 
    { 
     //// 
    } 
} 

здесь я версионности .....

[ServiceContract(Namespace = "http://www.testk.com/2/11", Name = "cService")] 
    public interface ICServicev1 
{ 
    [OperationContract(Name="GetWorkingDetails")] 
    void GetWorkingDetailsV2(int a); 
} 

<endpoint address="" behaviorConfiguration="AjaxBehavior" 
      binding="webHttpBinding" bindingConfiguration="" name="v0" 
      contract="ICService" /> 
<endpoint address="r1" behaviorConfiguration="AjaxBehavior" 
      binding="webHttpBinding" bindingConfiguration="" name="v1" 
      contract="ICServicev1" /> 

Когда я называю существующий метод, он прекрасно работает, и когда я называю service.svc/r1/GetWorkingDetails он прекрасно работает. Но я хочу также позвонить service.svc/r1/GetList, который находится в предыдущем контракте. Как я могу назвать это для обратной совместимости.

Thx

ответ

0

Я думаю service.svc/r1/GetList не представляется возможным. Потому что ваш не наследует ICService до ICServicev1 (т. Е. public interface ICServicev1 : ICService). Infact вы можете добиться этого следующим образом.

1) Создать ICServiceCommon интерфейс с методом void GetList(int a);.

2) Наследуйте ICServiceCommon интерфейс к ICService и ICServicev1 [public interface ICService : ICServiceCommon и public interface ICServicev1 : ICServiceCommon]

3) Реализация ICService и ICServicev1 интерфейсы для MyService класса [public class MyService : ICService, ICServicev1].

Клиент старой версии вызывает те же методы. [Обратная совместимость]

service.svc/GetWorkingDetails 
service.svc/GetList 

и новый клиент может позвонить

service.svc/r1/GetWorkingDetailsV2 
service.svc/r1/GetList 

Надежда этот подход является полезным.