我正在使用SOAP Web服务。 Web服务为其每个客户指定单独的服务URL。我不知道他们为什么那样做。它们的所有功能和参数在技术上都是相同的。但是,如果我想编写一个服务程序,我必须知道每个公司是否有意。这意味着对于一家名为“apple”的公司,我必须使用以下使用声明:
using DMDelivery.apple;
而另一个名为“橙色”
using DMDelivery.orange;
但我希望我的程序能够为所有这些程序工作,并将公司名称或服务参考点作为参数。
更新:如果我必须为每个客户编写一个单独的应用程序,那么我将不得不保持所有这些应用程序的每次小更改都会更新,这将是一个低效的工作随着客户数量的增加。
有人能想到解决方案吗?我将不胜感激。
答案 0 :(得分:3)
如果您拥有所有服务的基本合同(接口),则可以使用某种factory来实例化您的具体服务,并且只在您的客户端代码(调用代码)中引用您的接口。< / p>
//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();
您还可以使用Dependency Injection原则。
答案 1 :(得分:0)
如果一切都相同并且只是端点地址不同,也许您可以在调用Web服务方法之前尝试仅更改它。
MyWebServiceObject ws= new MyWebServiceObject();
ws.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://www.blah.com/apple.asmx");
答案 2 :(得分:0)