Генерация 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, используя флаг / dconly на svcutil. Вам нужно включить все имена схем в вызов svcutil. Это создаст файл класса со всеми типами.
Зайдите в файл и взломайте вручную, пока все ваши классы не окажутся в нужных пространствах имен. Скомпилируйте это в сборку.
Затем вернитесь в сервис интеграции 1 и сгенерируйте свой прокси-код, используя флаг / r в svcutil, чтобы ссылаться на вашу сборку, содержащую ваши общие типы, которые вы хотите использовать повторно. Это создаст файл класса, содержащий ваш прокси, который должен ссылаться на ваши общие типы.
Затем вы можете сделать то же самое для интеграции 2 и 3.
Однако этот подход основан на том, что svcutil использует DataContractSerializer для выполнения работы, поскольку флаг / r недоступен для XmlSerializer. И это будет работать только в том случае, если схемы, представленные в службах Oracle, придерживаются довольно строгих правил DCS (можно найти здесь: http://msdn.microsoft.com/en-us/library/ms733112.aspx). Если эти правила не соблюдаются, то svcutil вернется к использованию XmlSerializer, который не поддерживает повторное использование типов.
Надеюсь это поможет.
Использовать XSD2Code - вы можете указать целевое пространство имен сгенерированного класса C#.