2010-06-07 5 views
6

Ich verwende BizTalk 2006 R2, um eine Webreferenz aus einer WSDL-Datei zu generieren.BizTalk Web Reference - generierte XSD hat Informationen aus WSDL "verloren"

Vergleicht man die generierte XSD mit der WSDL, ist offensichtlich, dass eine Menge Informationen verloren gegangen sind.

sich das folgende Auszug aus dem 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> 

Die äquivalente XSD die BizTalk erzeugt hat, ist:

<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> 

So hat die XSD die Restriktionsmuster verloren und hat seine eigenen Werte gesetzt für minOccurs und maxOccurs.

Ich muss von einer anderen Quelle zu der XSD zuordnen und ich möchte Daten abfangen, die in dieser Phase nicht mit der WSDL übereinstimmen.

Weiß jemand, warum BizTalk die Einschränkungen in der XSD nicht gespeichert hat; oder wie kann ich nicht verlustbehaftete XSD generieren?

+0

Führt die Verwendung der Xsd.exe zu denselben Ergebnissen? – TEEKAY

+0

Vielen Dank für den Vorschlag, TEEKAY. Als ich xsd.exe auf die WSDL-Datei zeigte: xsd.exe "C: \ Demos \ MyProblem.wsdl"/o: "C: \ Demos" Ich habe den Fehler "Fehler: ungültige Befehlszeile Argument: ' C: \ Demos \ MyProblem.wsdl '" Dann habe ich die Dateierweiterung geändert, um zu versuchen, xsd.exe zu täuschen: xsd.exe" C: \ Demos \ MyProblem.xsd "/ o:" C: \ Demos " Und ich habe den Fehler: "Fehler: Kann nur eine der Klassen oder Datensätze generieren." Danke für den Vorschlag sowieso. –

Antwort

1

Wenn Sie Schema-Validierung in einer BizTalk Pipeline tun, Einschränkungen und maxOccurs> 1 nicht eigentlich vor sich geht, etwas zu tun - sie sind nicht Wird von BizTalk zur Laufzeit verwendet. Ich vermute, das ist der Grund, warum die Web-Referenz verlustreich ist.

Ich persönlich mochte noch nie die Funktion "Web-Referenz hinzufügen" oder sogar die "Adapter-Metadaten hinzufügen"/WCF. Wenn Ihre WSDL so häufig geändert wird, ist das manuelle Kopieren der Typdefinitionen in eine xsd-Datei zu viel Arbeit:

a) Sehen Sie sich eine einfache Konsolenanwendung an, um die WSDL abzurufen, den Typ (en) zu extrahieren und die xsd zu aktualisieren Datei (starten Sie es aus dem Menü Externe Tools in VS), und

b) herauszufinden, was falsch mit Ihrem Entwicklungsprozess ist, der häufig Änderungen am Servicevertrag erfordert!

Verwandte Themen