Вызов разных серверов с одним и тем же объектом ReportingService2010

У меня есть два сервера SSRS с идентичными конфигурациями. Ну, собственно, три. Назовем их:

  • Сервер отчетов A
  • Сервер отчетов A-test
  • Сервер отчетов B

Теперь я могу легко переключаться между A и A-тестом в зависимости от того, нахожусь ли я в тестовом или производственном режиме, используя преобразование web.config. Так что это нормально.

Однако во время выполнения я хотел бы иметь возможность переключаться между отправкой вызовов на сервер A и B.

Я потенциально мог бы сделать это, создав два разных объекта ReportingService2010: один с пространством имен com.company.serverA, а другой - с пространством имен com.company.serverB. Для этого потребуется много условных операторов, но это можно сделать.

Я бы хотел иметь возможность использовать полиморфизм и передавать моему классу ReportCopier различные объекты ReportingService2010, но они недостаточно тесно связаны. Компилятор рассматривает их как совершенно отдельные объекты.

Есть ли способ обойти это? Есть ли способ динамически изменить URL-адрес, на который указывает объект ReportingService2010 во время выполнения? Есть ли способ как-то справиться с обоими типами объектов, используя отражение?

На данный момент единственные решения, которые у меня есть: 1) реализовать классы-оболочки для всех объектов, что кажется утомительным, или 2) использовать две копии класса ReportCopier с изменением только пространства имен между ними, что некрасиво.

Мысли?


person Slothario    schedule 08.12.2016    source источник
comment
Вам нужна балансировка нагрузки?   -  person SMM    schedule 08.12.2016
comment
Нет, у нас работают две в основном идентичные копии, потому что мы приобрели компанию, и у них есть собственный экземпляр.   -  person Slothario    schedule 08.12.2016


Ответы (1)


Это, безусловно, самое простое решение сложной проблемы, которое я нашел: я могу установить свойство URL. Я был слишком занят беспокойством о наследстве, чтобы осознать это.

ReportingService2010 rs = new ReportingService2010();
rs.Url = "https://serverA.company.com:443/ReportServer/ReportService2010.asmx";
// or...
rs.Url = "https://serverB.company.com:443/ReportServer/ReportService2010.asmx";
person Slothario    schedule 08.12.2016