“using"两个函数几乎完全相同的库

本文关键字:函数 两个 quot using | 更新日期: 2023-09-27 18:12:11

我正在使用SOAP web服务。web服务为每个客户指定一个单独的服务URL。我不知道他们为什么这么做。它们的所有函数和参数在技术上都是相同的。但是如果我想为服务编写程序,我必须知道它是针对每个公司的。这意味着对于一个名为"apple"的公司,我必须使用下面的using语句:

using DMDelivery.apple;

另一个叫做"orange"

using DMDelivery.orange;

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

Update:如果我必须为每个客户编写一个单独的应用程序,那么我将不得不在每个小更改时保持所有应用程序相互更新,随着客户数量的增加,这将是一个效率低下的工作。

有谁能想到解决办法吗?我很感激。

“using"两个函数几乎完全相同的库

如果你的所有服务都有一个基本契约(接口),你可以使用一种工厂来实例化你的具体服务,并且只在你的客户端代码(调用代码)中引用你的接口。

//service interface
public interface IFruitService{
  void SomeOperation();
}
//apple service
public class AppleService : IFruitService{
  public void SomeOperation(){
    //implementation
  }
}

有一个工厂类(你可以把你的using语句放在这里)

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;
  }
}

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

string fruitKind = //get it from configuration
IFruitService service = ServiceFactory.CreateService( fruitKind );
service.SomeOperation();

如果一切都是一样的,只是端点地址不同,也许你可以在调用web服务方法之前尝试只更改它。

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