C# &引用;使用;具有几乎相同功能的两个不同库的

C# &引用;使用;具有几乎相同功能的两个不同库的,c#,.net,web-services,soap,C#,.net,Web Services,Soap,我正在使用SOAP web服务。web服务为每个客户指定一个单独的服务URL。我不知道他们为什么那样做。它们的所有功能和参数在技术上是相同的。但是,如果我想为这项服务编写一个程序,我必须知道每个公司是否打算这样做。这意味着对于一家名为“苹果”的公司,我必须使用以下使用语句: using DMDelivery.apple; 另一个叫“橙色” 但是,我希望我的程序能够为所有人工作,并将公司名称或服务参考点作为参数 更新:如果我必须为每个客户编写一个单独的应用程序,那么我必须通过每一个小的更改让他们

我正在使用SOAP web服务。web服务为每个客户指定一个单独的服务URL。我不知道他们为什么那样做。它们的所有功能和参数在技术上是相同的。但是,如果我想为这项服务编写一个程序,我必须知道每个公司是否打算这样做。这意味着对于一家名为“苹果”的公司,我必须使用以下使用语句:

using DMDelivery.apple;
另一个叫“橙色”

但是,我希望我的程序能够为所有人工作,并将公司名称或服务参考点作为参数

更新:如果我必须为每个客户编写一个单独的应用程序,那么我必须通过每一个小的更改让他们彼此更新,随着客户数量的增加,这将是一项效率低下的工作


有人能想出解决办法吗?我将不胜感激。

如果一切都一样,只是端点地址不同,那么在调用web服务方法之前,您可以尝试只更改端点地址

MyWebServiceObject ws= new MyWebServiceObject();
ws.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://www.blah.com/apple.asmx");
  • 在实现中使用任意一个客户机。苹果除外
  • 写一个消息检查器并将其附加到输出点
  • 在消息检查器中,用适当的客户端名称空间替换类型的名称空间。 前任: 在消息检查器之前:MyClinet.Apple.Type
    如果提供程序为橙色,则在消息检查器之后:MyClient.Orange.Type

  • 如果您的所有服务都有一个基本契约(接口),那么您可以使用一种方法来实例化您的具体服务,并且在您的客户机代码(调用代码)中只引用您的接口

    例如,有一种工厂类(您可以在此处使用语句放置您的

    在调用代码中(只需为包含接口的名称空间添加
    using
    语句):


    您也可以使用该原则。

    我猜您当前正在使用“添加服务引用”添加web服务引用,对吗?我想您可能需要使用适配器模式,或者其他一些设计模式(我也想到了Facade)。每个名称空间中都有什么?模型+合同?如果DMDelivery.apple.MyFunction和DMDelivery.orange.MyFunction似乎是相同的方法,那么事实上就不一样了。更复杂一点,看看动态web服务消费/调用/调用。这可能会派上用场。@ranhirucoray是的,我正在使用“添加服务引用”。我的程序中有很多类。我应该如何处理这些“使用”语句?有没有一种方法可以全局宣布一个适用于所有这些类的using语句?就像VB.Net中的“添加用户导入”一样,这是否意味着我应该为每个客户(一个用于Apple,一个用于Orange)单独实现该服务,而他们几乎所有的功能都是相同的?不,我试图说明的是,每个服务都有自己的实现,正如您所说的“几乎所有的功能都是相同的”,然后您可以创建一个接口(或基类),该接口“隐藏”调用代码的实现。在这种情况下,您的调用代码不知道它是在使用“apple”还是“orange”服务,它只知道它是在使用
    IFruitService
    接口(或Common基类)的实现。这样,您只需为您的客户机编写一次代码(调用代码)。这听起来很合理。要调用的服务实例(无论是apple还是orange)将是一个输入参数,对吗?对。然后取决于您(并且取决于您的系统)如何检索要使用的“种类”服务:通过配置、方法或类的参数。。。
    MyWebServiceObject ws= new MyWebServiceObject();
    ws.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://www.blah.com/apple.asmx");
    
    //service interface
    public interface IFruitService{
      void SomeOperation();
    }
    
    //apple service
    public class AppleService : IFruitService{
      public void SomeOperation(){
        //implementation
      }
    }
    
    public static class ServiceFactory{
      public static IFruitService CreateService(string kind){
        if(kind == "apple")
          return new AppleService();
        else if(kind == "orange")
          return new OrangeService();
        else
          return null;
      }
    }
    
    string fruitKind = //get it from configuration
    IFruitService service = ServiceFactory.CreateService( fruitKind );
    service.SomeOperation();