BizTalk Web Reference - сгенерированный XSD «потерял» информацию из WSDL - PullRequest
6 голосов
/ 07 июня 2010

Я использую 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 без потерь?

Ответы [ 2 ]

1 голос
/ 06 июля 2010

Если вы не проводите проверку схемы в конвейере BizTalk, ограничения и maxoccurs> 1 на самом деле ничего не будут делать - они не будут использоваться BizTalk во время выполнения. Я предполагаю, что это причина, по которой веб-ссылки с потерями.

Мне лично никогда не нравилась функция «добавить веб-ссылку» или даже «добавить метаданные адаптера» / WCF. Если ваш wsdl меняется так часто, то ручное копирование определений типов в xsd-файл является слишком большой работой:

a) посмотрите на создание простого консольного приложения для извлечения wsdl, извлечения типов и обновления файла xsd (выведите его из меню External Tools в VS) и

b) выяснить, что не так с вашим процессом разработки, который часто требует изменений в контракте на обслуживание!

0 голосов
/ 29 июня 2010

Вы пытались использовать адаптер WCF, а не "добавить веб-ссылку", чтобы сделать это?

Вот пример ...

http://blogs.digitaldeposit.net/SARAVANA/post/2007/05/31/BizTalk-2006-R2-consume-an-ASMX-webservice-using-WCF-BasicHttp-adapter.aspx

...