我有一个像服务器一样的软件。客户端通过公开的接口与该软件进行通信。我们公司希望为我们的软件引入新功能。
版本1: 客户< --->界面X1,Y1,Z1< ---->服务器
第2版:
客户< --->界面X2,Y2,Z2 ---->服务器
客户希望能够随时切换到旧版本。当然,如果他们想要切换到不同的服务器版本,他们会将其界面更改为旧版本。我们公司希望我们有一个下拉菜单来选择不同的版本。选择最新版本应该公开新功能。选择以前的版本应隐藏新功能。现在,问题是新功能也会修改现有功能的行为!一些暴露的接口已被更改。这包括现有方法签名更改,一些方法删除和一些新方法添加。但是,现有方法中的主要代码更改并未完成。客户端软件将进行更改,以便在切换版本时适应服务器更改。我们的服务器代码维护是主要问题,因为代码库非常大。因此,我们公司既不希望我们添加if / else条件检查来实现此目标,也不希望代码重复。该软件是用C#编写的,使用.NET 3.5& WCF。客户端使用SOAP与此软件进行通信。
请建议我实现这一目标的最佳方法。我也可以参考任何文件/设计/代码。提前致谢
答案 0 :(得分:2)
Here是wcf服务指南的一个很好的起点。 WCF开发人员在开发过程中牢记版本控制,因此大多数问题都是已知的,并在wcf文档中进行了描述
如果您的合同是可更改的,并且您无法对此做些什么,那么您可以保留旧接口并实现新接口
假设你有合同
interface IContractV1
{
void M();
void N();
}
现在,在第二个版本中,您要删除一个方法,然后添加另一个方法
interface IContractV2
{
void M();
void P();
}
您的服务可以使用不同的URI保持两个合同
youraddress/service/v1
youraddress/service/v2
现在旧客户端可以连接旧服务,新服务可以连接到新服务
请注意,您可以重复使用数据合同,如指南中所述,但您也无法从中删除任何属性