Я использую BizTalk 2006 R2 для генерации веб-ссылки из файла WSDL.
Сравнивая сгенерированный XSD с WSDL, очевидно, что большая информация была потеряна.
Рассмотрите следующее извлечение из WSDL:
<s:element form="unqualified" minOccurs="0" maxOccurs="4" name="Applicant">
<s:complexType>
<s:sequence>
<s:element form="unqualified" minOccurs="1" maxOccurs="1" name="ApplicantIdentifier">
<s:simpleType>
<s:restriction base="s:string" />
</s:simpleType>
</s:element>
<s:element form="unqualified" minOccurs="0" maxOccurs="1" name="Name">
<s:complexType>
<s:sequence>
<s:element form="unqualified" minOccurs="0" maxOccurs="1" name="Title">
<s:simpleType>
<s:restriction base="s:string">
<s:maxLength value="10" />
</s:restriction>
</s:simpleType>
</s:element>
<s:element form="unqualified" minOccurs="0" maxOccurs="1" name="Forename">
<s:simpleType>
<s:restriction base="s:string">
<s:pattern value="[0-9A-Za-z \-]*" />
<s:maxLength value="15" />
<s:minLength value="1" />
</s:restriction>
</s:simpleType>
</s:element>
<!-- more -->
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
Эквивалентный XSD, который генерировал BizTalk:
<xs:element minOccurs="0" maxOccurs="unbounded" form="unqualified" name="Applicant">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="ApplicantIdentifier" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="Name">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="Title" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="Forename" type="xs:string" />
<!-- more -->
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
Так, XSD потерял шаблоны ограничения и установил его собственные значения для minOccurs и maxOccurs.
Я должен отобразиться от другого источника до XSD, и я хочу захватить данные, которые не соответствуют WSDL на том этапе.
Делает любой знает, почему BizTalk не сохранил ограничения в XSD; или как я могу генерировать XSD нес потерями?
Если вы не выполняете проверку схемы в конвейере BizTalk, ограничения и maxoccurs> 1 на самом деле ничего не сделают - они не используются BizTalk во время выполнения. Я предполагаю, что это причина того, что веб-ссылка с потерями.
Мне лично никогда не нравилась функция «добавить веб-ссылку» или даже «добавить метаданные адаптера» / WCF. Если ваш wsdl меняется так часто, что ручное копирование определений типов в файл xsd - слишком большая работа:
a) посмотрите на создание простого консольного приложения для получения wsdl, извлеките тип (ы) и обновите файл xsd (начните с меню «Внешние инструменты» в VS) и
б) выясните, что не так с вашим процессом разработки, который требует частого изменения контракта на обслуживание!
Пробовали ли вы использовать для этого адаптер WCF вместо «добавления веб-ссылки»?
Вот пример ...