C# &引用;使用;具有几乎相同功能的两个不同库的
我正在使用SOAP web服务。web服务为每个客户指定一个单独的服务URL。我不知道他们为什么那样做。它们的所有功能和参数在技术上是相同的。但是,如果我想为这项服务编写一个程序,我必须知道每个公司是否打算这样做。这意味着对于一家名为“苹果”的公司,我必须使用以下使用语句:C# &引用;使用;具有几乎相同功能的两个不同库的,c#,.net,web-services,soap,C#,.net,Web Services,Soap,我正在使用SOAP web服务。web服务为每个客户指定一个单独的服务URL。我不知道他们为什么那样做。它们的所有功能和参数在技术上是相同的。但是,如果我想为这项服务编写一个程序,我必须知道每个公司是否打算这样做。这意味着对于一家名为“苹果”的公司,我必须使用以下使用语句: using DMDelivery.apple; 另一个叫“橙色” 但是,我希望我的程序能够为所有人工作,并将公司名称或服务参考点作为参数 更新:如果我必须为每个客户编写一个单独的应用程序,那么我必须通过每一个小的更改让他们
using DMDelivery.apple;
另一个叫“橙色”
但是,我希望我的程序能够为所有人工作,并将公司名称或服务参考点作为参数
更新:如果我必须为每个客户编写一个单独的应用程序,那么我必须通过每一个小的更改让他们彼此更新,随着客户数量的增加,这将是一项效率低下的工作
有人能想出解决办法吗?我将不胜感激。如果一切都一样,只是端点地址不同,那么在调用web服务方法之前,您可以尝试只更改端点地址
MyWebServiceObject ws= new MyWebServiceObject();
ws.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://www.blah.com/apple.asmx");
如果提供程序为橙色,则在消息检查器之后: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();