Как переопределить пространство имен всего контракта данных WCF-сервиса?
Коллеги, приветствую,
Родилась неожиданная задача: Необходимо у WCF-сервиса, либо в процессе сборки, либо в процессе работы, переопределять пространство имен всего контракта данных, то есть для всех используемых сущностей.
Проблема следующая: Есть 2 разных сервиса с разными пространствами имен, назовем их "ns1" и "ns2". Они используют в контракте некоторые общие сущности из общего проекта, у которых пространство имен "nsBase", как следствие, в контракте есть и пространство "ns1", и "nsBase".
Таким образом:
1) По факту наружу всплывают моменты внутренней реализации, поскольку для пользователя сервиса наличие этого базового пространства имен не несет никакого смысла.
2) Формируемые SOAP-запросы, если работать с ними через XML, содержат мешанину префиксов из разных пространств имен.
Нашел один жутко костыльный способ - использование IDataContractSurrogate и возвращение из метода GetDataContractType типа данных в качестве заглушки, просто с нужным пространством имен. Но штамповать такие заглушки тоже не самое лучшее решение, всегда есть риск что-нибудь потерять.
Хотелось бы и схему сделать аккуратной, и код/сущности повторно использовать.
Буду благодарен, если кто-то поделится своими идеями как можно разрешить эту проблему, спасибо!