我在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
答案 0 :(得分:0)
我猜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
]
ICService
界面
3)实施与ICServicev1
班级[MyService
]的public class MyService : ICService, ICServicev1
和service.svc/GetWorkingDetails
service.svc/GetList
接口。
旧版客户端调用相同的方法。 [向后兼容]
service.svc/r1/GetWorkingDetailsV2
service.svc/r1/GetList
新客户可以致电
{{1}}
希望这种方法很有用。