Динамически использовать один и тот же метод в нескольких ссылках веб-службы? - PullRequest
0 голосов
/ 18 января 2019

В c # .Net Framework 4.5 (Visual Studio Ultimate 2012, версия 11.0.61219.00, обновление 5) я пытаюсь определить переменную службы во время выполнения для использования веб-службы. Каждый веб-сервис (их много) все определены одинаково, за исключением URL-адреса конечной точки, но учетные данные не будут пересекаться для аутентификации. Приведенное ниже условие является упрощенным для упрощения рассматриваемой проблемы. Следующий код выдает ошибку: Не удается неявно преобразовать тип WebService2.Service в WebService1.Service.

То, что я пробовал: вызов функций для возврата правильного сервиса, но параметры или присваивание требуют определенного типа.

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

Я хочу иметь возможность использовать переменную service в остальной части программы без необходимости дублирования кода везде для использования множества ссылок на веб-службы.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Предполагая, что разные сервисы имеют одни и те же имена методов, вы можете создать интерфейс, который реализуют все сервисы, используя интерфейс

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");
0 голосов
/ 18 января 2019

Похоже, что вы хотите сделать, вам нужен общий интерфейс между двумя сервисами, чтобы вы могли внедрить любой сервис, который вы хотите использовать.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...