2010-06-07 24 views
6

Używam BizTalk 2006 R2 do generowania odwołania do stron WWW z pliku WSDL.BizTalk Web Reference - wygenerowany XSD ma "utracone" informacje z WSDL

Porównując wygenerowany XSD do WSDL, widać, że wiele informacji zostało utraconych.

Rozważmy następujący wyciąg z 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> 

Równowartość XSD które BizTalk wygenerował jest:

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

Tak, XSD traci wzory restrykcyjne i ustawił swoje wartości dla minOccurs i maxOccurs.

Muszę mapować z innego źródła do XSD i chcę pułapkę danych, które nie są zgodne z WSDL na tym etapie.

Czy ktoś wie, dlaczego BizTalk nie zachował ograniczeń w XSD; lub jak mogę wygenerować niestratny XSD?

+0

Czy używanie Xsd.exe daje takie same wyniki? – TEEKAY

+0

Dziękuję za sugestię, TEEKAY. Kiedy wskazałem plik xsd.exe w pliku WSDL: xsd.exe "C: \ Demos \ MyProblem.wsdl"/o: "C: \ Demos" Wystąpił błąd "Błąd: nieprawidłowy argument wiersza poleceń:" C: \ Demos \ MyProblem.wsdl '" Następnie zmieniłem rozszerzenie pliku, aby spróbować oszukać xsd.exe: xsd.exe" C: \ Demos \ MyProblem.xsd "/ o:" C: \ Demos " I mam błąd: "Błąd: może wygenerować tylko jedną z klas lub zestawów danych." Dzięki za sugestię. –

Odpowiedz

1

ile robisz poprawności schematu w rurociągu BizTalk, ograniczenia i maxOccurs> 1 nie są rzeczywiście zamiar zrobić cokolwiek - nie są one używany przez BizTalk w czasie wykonywania. Zgaduję, to jest powód, dla którego odniesienie do Internetu jest stratne.

Osobiście nigdy nie polubiłem funkcji "dodaj odniesienie do strony internetowej" ani nawet "dodaj metadane adaptera"/WCF. Jeśli twój plik wsdl zmienia się tak często, to ręczne kopiowanie definicji typów do pliku xsd to za dużo pracy:

a) spójrz na budowanie prostej aplikacji konsolowej, aby pobrać kod źródłowy wsdl, wypakuj typ (y) i zaktualizuj xsd plik (z menu Narzędzia zewnętrzne w VS) i

b) sprawdź, co dzieje się z procesem rozwoju, który często wymaga zmian umów serwisowych!