C# 使软件根据版本选择更改其行为

C# 使软件根据版本选择更改其行为,c#,.net,wcf,client-server,C#,.net,Wcf,Client Server,我有一个像服务器一样工作的软件。客户端通过公开的接口与该软件通信。我们公司想给我们的软件引入新功能 第1版: 客户端接口X1、Y1、Z1服务器 第2版: 客户端接口X2、Y2、Z2-->服务器 客户希望能够随时切换到旧版本。当然,如果他们想切换到不同的服务器版本,他们会将界面更改为旧版本。我们公司希望我们有一个下拉列表来选择不同的版本。选择最新版本应显示新功能。选择早期版本应隐藏新功能。现在的问题是,新功能也会修改现有功能的行为!一些公开的接口已被更改。这包括现有方法签名更改、一些方法删除和一些

我有一个像服务器一样工作的软件。客户端通过公开的接口与该软件通信。我们公司想给我们的软件引入新功能

第1版: 客户端接口X1、Y1、Z1服务器

第2版:

客户端接口X2、Y2、Z2-->服务器

客户希望能够随时切换到旧版本。当然,如果他们想切换到不同的服务器版本,他们会将界面更改为旧版本。我们公司希望我们有一个下拉列表来选择不同的版本。选择最新版本应显示新功能。选择早期版本应隐藏新功能。现在的问题是,新功能也会修改现有功能的行为!一些公开的接口已被更改。这包括现有方法签名更改、一些方法删除和一些新方法添加。但现有方法中的主要代码更改尚未完成。无论何时切换版本,客户机软件都将进行更改以适应服务器的更改。我们主要关心的是服务器代码维护,因为代码库相当大。因此,我们公司既不希望我们添加if/else条件检查来实现这一目标,也不希望我们添加代码复制。该软件是使用.NET3.5和WCF用C编写的。客户端使用SOAP与该软件通信

请向我建议实现这一目标的最佳方法。任何我可以参考的文件/设计/代码也将不胜感激。提前感谢

是wcf服务指南的良好起点。WCF开发人员在开发时牢记版本控制,因此大多数问题在WCF文档中都有描述

如果您的合同是可变的,并且您不能用它做些什么,那么您可以保留旧的接口并实现新的接口

假设你有合同

interface IContractV1
{
   void M();
   void N();
}
现在在第二个版本中,您希望删除一个方法,然后添加另一个

interface IContractV2
{
   void M();
   void P();
}
您的服务可以使用不同的URI保持这两个契约

youraddress/service/v1
youraddress/service/v2
现在,旧客户端可以连接到旧服务,新客户端可以连接到新服务


请注意,您可以重复使用datacontracts,如指南中所述,但同样不能从中删除任何属性

感谢ArsenMkrt的指导。为了深入了解更多细节,合同接口由第三方提供。这是一种所有公司都应该遵循的标准。因此,我们无法控制接口。我们需要实施和支持它们。有没有什么方法可以在不做太多更改的情况下遵守两个版本的接口?保留两个合同有什么问题?在这种情况下,您可以有两个接口,并为这两种情况保留实现,这不一定会导致代码重复,您可以在一个服务中实现它,或者让一些助手类感谢您理解我的问题。你能多说一点吗?由于我没有做过太多的设计工作,如果你能给我举个例子或指出一个我可以查看的地方,我将非常感激。我编辑了一篇文章,希望这有意义,请具体说明哪部分是你的问题,我将试着回答得更清楚。我想我明白了。非常感谢你的帮助: