C# 通过编译标志寻找正确的设计,两个不同的Web服务

C# 通过编译标志寻找正确的设计,两个不同的Web服务,c#,.net,web-services,design-patterns,C#,.net,Web Services,Design Patterns,我有两个web服务,API稍有不同,例如: void LOG(string , string ,out int) int LOG(string ,string) 其中一个用于生产,另一个用于测试 在这种情况下,最好的做法是什么,如何在代码中编写更美观的代码。。。 不要在我的主代码中使用丑陋的#IF#ELSE语句 第一个是生产版本,第二个是测试版本。 两个版本的功能都相同。 它们之间的区别是,我有一个来自原始web服务的WSDL文件,我使用了WSDL.exe yourFile.WSDL/l:CS

我有两个web服务,API稍有不同,例如:

void LOG(string , string ,out int)
int LOG(string ,string)
其中一个用于生产,另一个用于测试

在这种情况下,最好的做法是什么,如何在代码中编写更美观的代码。。。 不要在我的主代码中使用丑陋的
#IF#ELSE
语句

第一个是生产版本,第二个是测试版本。 两个版本的功能都相同。 它们之间的区别是,我有一个来自原始web服务的WSDL文件,我使用了
WSDL.exe yourFile.WSDL/l:CS/serverInterface
并获得了我的测试服务,但当我将它作为我的应用程序的引用添加时,我得到了一个不同的代理,函数签名也有点不同。不知道为什么

但是当我把它添加到我的 我有一个不同的申请 代理和函数签名已被删除 有点不同,不知道为什么

我认为这样做是为了避免web服务客户机类中具有相同签名的两个方法。 如果我没弄错的话,您有两个webservice实例和一个接口。然后,您不需要向项目添加两个引用。 只需在实例化时将web服务的位置指定为参数,而不是使用无参数构造函数

更新 从技术上讲(因为您用“设计模式”标记了它),您可以将策略模式与依赖项注入一起用于调用。
但如果这些w/s实例完全相同,我建议您找出这些WSDL-s或生成的客户机代码的错误。问题在于存根的生成,而不是代码的优雅

你能提供关于哪一个是产品和哪一个是测试的信息吗?你为什么要这么做?每个参数是什么?特别是out int。看起来他们做了同样的事情?他们两个都可以使用第一个签名@Oskar Kjellin,看我的评论我是一个,但对你的期望很好奇。方法上有不同的签名。所以你知道你不能用同样的方式称呼他们。但你还是想用同样的方式称呼他们。您不想创建包装器。没有别的办法。如果签名不一样,你不能用同样的方式调用它们我甚至试着做了一些测试项目,甚至在那里我得到了这个int LOG(string,string)而不是out参数。如果签名不同,你的调用代码也有点不同?