Переключение между экземплярами веб-службы (ASMX) - PullRequest
0 голосов
/ 31 июля 2009

У меня один и тот же ASP.NET WebService развернут 3 раза под 3 разными URI, настроенными на просмотр 3 разных сред баз данных.

У меня есть библиотека классов, которая использует WebService с использованием веб-ссылки.

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

Хотя это и не сложно, но это трудная задача для создания Live-версий библиотеки классов и замедляет процесс развертывания (быстрое примечание, что есть несколько файлов .asmx, но в этом примере описывается только 1, чтобы его было легче понять).

Я пытаюсь создать класс DataServices, который возвращает интерфейс для WebService. В библиотеке классов все 3 веб-ссылки существуют, и я создаю правильную ссылку через простую конфигурацию в самой библиотеке классов, а затем возвращаю правильный веб-сервис в качестве интерфейса.

Мне все это кажется простым, но он не работает, поскольку интерфейс не работает через веб-службы. Может кто-нибудь подтвердить это для меня или сказать, что я делаю не так?

Невозможно привести объект типа «Company.Project.Classes.MyWebServiceLive.MyWebService» к типу «Company.Project.Interfaces.IMyWebService».

Спасибо

EDIT WebService, конечно, реализует интерфейс, и это все, что я думал, что мне нужно сделать ...

Ответы [ 2 ]

2 голосов
/ 31 июля 2009

Вам не нужно менять веб-ссылку и перекомпилировать. Просто установите свойство Url прокси веб-службы так, чтобы оно указывало на правильный сервис:

using (var svc = new MyWebServiceReference.MyService()) {
    svc.Url = theUrlToUse;
    return svc.SomeMethod();
}
0 голосов
/ 31 июля 2009

ОК, после дальнейших исследований я понимаю, что это потому, что веб-ссылка создает прокси в библиотеке классов. Этот прокси не реализует интерфейс, поэтому преобразование не выполняется.

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

Для добавления новой функции потребуется:

  • Добавить функцию интерфейса
  • Добавление функции в веб-службу
  • Обновить веб-ссылку
  • Внедрение интерфейса вручную в новом прокси-классе для каждой веб-службы

Если кто-то не может предложить что-то другое (например, как использовать WebService путем создания собственных прокси-классов, я думаю, что вернусь к изменению URI веб-ссылки для каждой сборки среды ... болезненно, но не так страшно, как выше !

...