Генерация DataContracts с точным пространством имен, как в XSD - PullRequest
5 голосов
/ 11 мая 2011

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

Integration1: <b>oracle/common/commonDataTypes.xsd</b>
              oracle/integration1/someXSD.xsd
              oracle/ebo/baseTypes.xsd
Integration2: <b>oracle/common/commonDataTypes.xsd</b>
              oracle/integration2/someXSD.xsd
              oracle/ebo/baseTypes.xsd
Integration3: <b>oracle/commonDataTypes.xsd</b>
              oracle/integration2/someXSD.xsd
              oracle/ebo/baseTypes.xsd

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

Ответы [ 2 ]

1 голос
/ 18 мая 2011

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

  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, который не поддерживаетподдержка повторного использования типов.

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

0 голосов
/ 15 мая 2011

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

...