6

BizTalk 2006 R2 を使用して、WSDL ファイルから Web 参照を生成しています。

生成された 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>

BizTalk が生成した同等の XSD は次のとおりです。

<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 を生成するにはどうすればよいですか?

4

2 に答える 2

1

BizTalk パイプラインでスキーマ検証を行っていない限り、制限と maxoccurs > 1 は実際には何も実行しません。実行時に BizTalk によって使用されることはありません。これが、Web 参照が不可逆である理由だと思います。

個人的には、「Web 参照の追加」機能や、「アダプター メタデータの追加」/WCF さえ好きではありませんでした。wsdl が頻繁に変更されている場合、タイプ定義を手動で xsd ファイルにコピーするのは大変な作業です。

a) wsdl を取得し、型を抽出し、xsd ファイルを更新する (VS の [外部ツール] メニューから開始する) 簡単なコンソール アプリの構築を検討します。

b) サービス契約の変更を頻繁に必要とする開発プロセスの何が問題なのかを突き止めます。

于 2010-07-06T12:30:52.623 に答える
0

これを行うために、「Web 参照の追加」ではなく WCF アダプターを使用してみましたか?

ここに例があります...

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

于 2010-06-29T18:48:45.217 に答える