Как программно изменить местоположение (URL) веб-службы и обновить веб-ссылку?

У меня есть веб-сервис:

http://127.0.0.1/something/someWS.asmx

Я добавляю это как веб-ссылку на мое приложение, но это не всегда будет Localhost... он может измениться на http://www.something.com/something/someWS.asmx.

Как программно изменить URL-адрес моей веб-ссылки? это так просто, как:

using (var service = new MyApi.MyApi())
{
    //txtUrl is the site
    service.Url = "http://" + txtUrl + "something/someWS.asmx";
}

ТАКЖЕ, как только я изменю это, как я могу обновить это программно? (эквивалентно щелчку правой кнопкой мыши и выбору "Обновить веб-ссылку")

примечание: в конечном итоге я пытаюсь выполнить выпадающие списки доступных методов на основе asmx WebService, доступного на сервере (service.Url)

1 ответ

Решение

Как прокомментировал Джон Сондерс, попытка поговорить с двумя версиями сервиса технически невозможна. Вы пытаетесь смешать действие времени компиляции / разработки ("обновить веб-ссылку") с действием времени выполнения.

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

Реализация:

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

Код:

interface IMyData 
{
      string GetLastName();
}

class MyDataFromOldWebService
{
    MyApi.MyApiV1 service;
    MyDataFromOldWebService(MyApi.MyApiV1 service)
    {
      this.service = service;
    }
    public string GetLastName()...
}

Dictionary<string, IMyData> services = new Dictionary<string, IMyData>()
  {
      { "Old Service", new MyDataFromOldWebService(new MyApi.MyApiV1(url))}
  };
Другие вопросы по тегам