WCF версионная проблема спокойного пути - PullRequest
1 голос
/ 21 апреля 2010

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

код:

[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

1 Ответ

0 голосов
/ 30 сентября 2012

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

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

Надеюсь, что этот подход полезен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...