Как программно изменить местоположение (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))}
};