2010-06-07 7 views
6

Estoy utilizando BizTalk 2006 R2 para generar una referencia web a partir de un archivo WSDL.Referencia web de BizTalk: XSD generado ha "perdido" información de WSDL

Al comparar el XSD generado con el WSDL, es evidente que se ha perdido mucha información.

Considere el siguiente extracto de la 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> 

El XSD equivalente que BizTalk ha generado es:

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

Así, el XSD ha perdido los patrones de restricción y ha establecido sus propios valores para minOccurs y maxOccurs.

Necesito hacer un mapeo desde otra fuente al XSD y deseo atrapar datos que no se ajustan al WSDL en esa etapa.

¿Alguien sabe por qué BizTalk no ha preservado las restricciones en el XSD; o cómo puedo generar XSD sin pérdida?

+0

¿El uso de Xsd.exe produce los mismos resultados? – TEEKAY

+0

Gracias por la sugerencia, TEEKAY. Cuando señalé xsd.exe en el archivo WSDL: xsd.exe "C: \ Demos \ MyProblem.wsdl"/o: "C: \ Demos" Recibí el error "Error: argumento de línea de comando no válido:" C: \ Demos \ MyProblem.wsdl '" Luego cambié la extensión de archivo para intentar engañar xsd.exe: xsd.exe" C: \ Demos \ MyProblem.xsd "/ o:" C: \ Demos " Y recibí el error: "Error: solo puede generar una de las clases o conjuntos de datos". Gracias por la sugerencia de todos modos. –

Respuesta

1

A menos que usted está haciendo la validación de esquema en una tubería de BizTalk, restricciones y maxOcurrencias> 1 son en realidad no va a hacer nada - no son utilizado por BizTalk en tiempo de ejecución. Supongo que esta es la razón por la cual la referencia web es con pérdida.

Personalmente, nunca me gustó la función 'agregar referencia web', ni siquiera la 'agregar metadatos del adaptador'/WCF. Si su wsdl está cambiando con tanta frecuencia que copiar manualmente las definiciones de tipo en un archivo xsd es demasiado trabajo:

a) busque construir una aplicación de consola simple para recuperar el wsdl, extraer el tipo (s) y actualizar el xsd archivo (arranca desde el menú Herramientas externas en VS) y

b) averigua qué está yendo mal con tu proceso de desarrollo que requiere cambios en los contratos de servicio con frecuencia.

Cuestiones relacionadas