在多个Web服务引用中动态使用相同的方法?

时间:2019-01-18 16:51:22

标签: c# web methods service

在c#.Net Framework 4.5(Visual Studio Ultimate 2012,版本11.0.61219.00更新5)中,我试图在运行时定义要使用的Web服务的服务变量。每个Web服务(有很多)都被定义为相同的(端点URL除外),但是凭据不会越过以进行身份​​验证。以下条件很容易简化当前问题。以下代码给出了错误:无法将类型WebService2.Service隐式转换为WebService1.Service

我尝试过的:调用函数以返回正确的服务,但是参数或赋值都需要特定的类型。

var service = new WebService1.Service();
service = new WebService2.Service();

我希望能够在程序的其余部分中使用变量service,而不必到处重复使用许多Web服务引用的代码。

2 个答案:

答案 0 :(得分:0)

似乎您要执行的操作是,这两个服务之间需要一个公共接口,因此您可以注入要使用的任何服务。

public class WebService1 : IWebService {...service code} 
public class WebService2 : IWebService{...service code}
public interface IWebService{...service methods you will be calling}

然后,您可以执行以下操作。

IWebService service = new WebService1.Service();
service = new WebService2.Service();

答案 1 :(得分:0)

假设不同的服务共享相同的方法名称,则可以使用该接口创建一个由所有服务实现的接口

IMyService.cs

interface IMyService
{
     void MyMethod(string filter);
}

MyWebServiceImplementation.cs

public class MyWebServiceImplementation : IMyService
{
    public void MyMethod(string filter);
}

MySecondWebServiceImplementation.cs

public class MySecondWebServiceImplementation : IMyService
{
    public void MyMethod(string filter);
}

MyImplemetationCode.cs

//Use different services from same variable

IMyService service = new MyWebServiceImplementation();
service.MyMethod("filter");
service = new MySecondWebServiceImplementation();
service.MyMethod("another filter");