У меня есть клиентское приложение веб-службы, которое подключается к стороннему веб-сервису. Сторонняя организация обновила свой веб-сервис, поэтому теперь мое клиентское приложение не работает с исключениями SOAP. К сожалению, я не могу просто обновить свое приложение для работы с новым веб-сервисом, так как некоторые из моих пользователей все еще будут использовать старый веб-сервис. Поэтому я бы хотел работать с любой версией веб-службы, используя одну версию моего клиентского приложения.
Поскольку Visual Studio генерирует кучу кода, который я компилирую при добавлении веб-ссылки, у меня теперь есть два файла: по одному для каждой версии веб-службы. Оба API на самом деле идентичны, просто изменились базовые SOAP-сообщения. Я поместил каждый из этих сгенерированных файлов в свое собственное пространство имен, чтобы избежать коллизий. Так что теперь я хотел бы иметь возможность выбирать, какое пространство имен использовать во время выполнения (на основе параметра конфигурации).
Например:
if (useOldVersion)
using OldVersionNamespace;
else
using NewVersionNamespace;
Очевидно, что это никогда не сработает, поскольку не будет никакого способа скомпилировать код, который ссылается на элементы в этом пространстве имен. Есть ли простой способ решить эту проблему? Может быть, я мог бы использовать отражение, чтобы делать то, что мне нужно во время выполнения?
Единственное, о чем я могу подумать, это буквально скопировать / вставить мой текущий код в два разных файла, с той лишь разницей, какое пространство имен используется вверху. Это кажется очень плохой идеей.