Генерация DataContracts с точным пространством имен, как в XSD

Мы должны интегрировать наш проект с серверной платформой Oracle. И эта интеграция осуществляется через различные веб-сервисы. У меня есть все WSDL и XSD для всех этих интеграций. И мне нужно генерировать DataContracts из этих WSDL и XSD.
Теперь проблема в том, что в основном все эти интеграционные ресурсы имеют общие типы данных. и я хочу использовать их снова.
например,

Интеграция1: oracle / common / commonDataTypes.xsd
              оракул /integration1/someXSD.xsd
              оракул / Ebo/baseTypes.xsd
Интеграция2: oracle / common / commonDataTypes.xsd
              оракул /integration2/someXSD.xsd
              оракул / Ebo/baseTypes.xsd
Интеграция3: oracle / commonDataTypes.xsd
              оракул /integration2/someXSD.xsd
              оракул / Ebo/baseTypes.xsd

в этом случае я хочу повторно использовать oracle.common.CommonDataTypes между интеграцией 1 и 2.
до сих пор я пробовал WSCF.blue & WSCF. Но эти инструменты генерируют весь код в одной папке (и в одном пространстве имен), а не в следующих пространствах имен.
Я хочу сгенерировать классы в пространствах имен, таких как oracle, oracle.commonData, oracle.integration1, oracle.ebo и т. Д. Так есть ли способ, которым генерируемые Datacontracts следуют точным обозначениям пространства имен, как XSD?

2 ответа

Решение

Боюсь, нет инструмента, который сделает это за вас. Или ни одного, о котором я знаю. Лучший способ получить то, что вы хотите:

  1. Извлеките контракты данных для интеграции 1, используя флаг / dconly на svcutil. Вам нужно включить все имена схем в вызов svcutil. Это создаст файл класса со всеми типами.

  2. Зайдите в файл и взломайте вручную, пока все ваши классы не окажутся в нужных пространствах имен. Скомпилируйте это в сборку.

  3. Затем вернитесь в сервис интеграции 1 и сгенерируйте свой прокси-код, используя флаг / r в svcutil, чтобы ссылаться на вашу сборку, содержащую ваши общие типы, которые вы хотите использовать повторно. Это создаст файл класса, содержащий ваш прокси, который должен ссылаться на ваши общие типы.

  4. Затем вы можете сделать то же самое для интеграции 2 и 3.

Однако этот подход основан на том, что svcutil использует DataContractSerializer для выполнения работы, поскольку флаг / r недоступен для XmlSerializer. И это будет работать только в том случае, если схемы, представленные в службах Oracle, придерживаются довольно строгих правил DCS (можно найти здесь: http://msdn.microsoft.com/en-us/library/ms733112.aspx). Если эти правила не соблюдаются, то svcutil вернется к использованию XmlSerializer, который не поддерживает повторное использование типов.

Надеюсь это поможет.

Использовать XSD2Code - вы можете указать целевое пространство имен сгенерированного класса C#.

Другие вопросы по тегам