“using"两个函数几乎完全相同的库
本文关键字:函数 两个 quot using | 更新日期: 2023-09-27 18:12:11
我正在使用SOAP web服务。web服务为每个客户指定一个单独的服务URL。我不知道他们为什么这么做。它们的所有函数和参数在技术上都是相同的。但是如果我想为服务编写程序,我必须知道它是针对每个公司的。这意味着对于一个名为"apple"的公司,我必须使用下面的using语句:
using DMDelivery.apple;
另一个叫做"orange"
using DMDelivery.orange;
但是我希望我的程序能够为所有这些人工作,并将公司名称或服务参考点作为参数。
Update:如果我必须为每个客户编写一个单独的应用程序,那么我将不得不在每个小更改时保持所有应用程序相互更新,随着客户数量的增加,这将是一个效率低下的工作。
有谁能想到解决办法吗?我很感激。
如果你的所有服务都有一个基本契约(接口),你可以使用一种工厂来实例化你的具体服务,并且只在你的客户端代码(调用代码)中引用你的接口。
//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");
- 在你的实现中使用任意一个客户端。前,苹果
- 编写一个消息检查器并将其附加到输出点
- 在消息检查器中,用适当的客户端名称空间替换类型的名称空间。例:之前消息检查器:myclient . apple . type
消息检查器后:MyClient.Orange。如果提供程序为橙色,则键入。