2009-07-31 2 views
0

У меня один и тот же ASP.NET WebService, развернутый 3 раза под 3 разных URI, настроенных для просмотра трех разных сред баз данных.Переключение между экземплярами веб-службы (ASMX)

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

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

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

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

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

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

Благодаря

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

+0

Также, пожалуйста, измените заголовок вопроса, поскольку мое описание немного плохое, но я никогда не пробовал это раньше (используя интерфейсы), поэтому не уверен, как описать мою проблему. –

ответ

2

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

using (var svc = new MyWebServiceReference.MyService()) { 
    svc.Url = theUrlToUse; 
    return svc.SomeMethod(); 
} 
+0

Человек, я надеюсь, ваше право! Учитывая мой ответ ...собираюсь пойти проверить это сейчас ... –

+0

Я прав. См. Http://johnwsaundersiii.spaces.live.com/blog/cns!600A2BE4A82EA0A6!435.entry. Вы не первый с этой проблемой. –

+0

Это потрясающие приветствия Джон, я искал это в течение столь длительного времени, но никогда не думал о том, чтобы изменить класс прокси. Благодаря! –

0

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

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

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

  • Добавить функцию интерфейса
  • Добавить функцию веб-службы
  • Update Web Reference
  • вручную реализовать интерфейс на новый прокси-класс для каждого Web Служба

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