2012-05-09 6 views
9

Se me ha encomendado enviar datos a un servicio web de terceros, han proporcionado una prueba servicio que ha demostrado funcionar con un cliente Java, sin embargo, no lo hace en .Net.Cómo puedo modificar correctamente un XSD generado para superar un error conocido de .Net que causa la excepción "cs0030: No se puede generar una clase temporal"

Cuando generar el proxy de servicio y, o bien una instancia del servicio o serializar el objeto de solicitud, me sale el siguiente error:

Unable to generate a temporary class (result=1). 
error CS0030: Cannot convert type 'TestStarXML.wsStarService.VSOptionInclusiveSetType[]' to 'TestStarXML.wsStarService.VSOptionInclusiveSetType' 
error CS0030: Cannot convert type 'TestStarXML.wsStarService.VSOptionConflictSetType[]' to 'TestStarXML.wsStarService.VSOptionConflictSetType' 
error CS0030: Cannot convert type 'TestStarXML.wsStarService.ColorRequirementSetType[]' to 'TestStarXML.wsStarService.ColorRequirementSetType' 
error CS0030: Cannot convert type 'TestStarXML.wsStarService.ColorExclusionSetType[]' to 'TestStarXML.wsStarService.ColorExclusionSetType' 
error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.VSOptionInclusiveSetType' to 'TestStarXML.wsStarService.VSOptionInclusiveSetType[]' 
error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.VSOptionConflictSetType' to 'TestStarXML.wsStarService.VSOptionConflictSetType[]' 
error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.ColorRequirementSetType' to 'TestStarXML.wsStarService.ColorRequirementSetType[]' 
error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.ColorExclusionSetType' to 'TestStarXML.wsStarService.ColorExclusionSetType[]' 

La tercera Parte que nos ha enviado este servicio utiliza Java, y no tuvieron problemas generar el proxy del servicio desde el servicio de prueba. Mi comprensión hasta el momento es que hay un error en .Net (see here) que genera el XSD para el archivo WSDL.

En la respuesta here, se menciona la modificación del XSD generado con atributos ficticios, por lo que añade el atributo ficticio como se sugiere:

<xs:complexType name="VSInclusivesOptionType"> 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="VSOptionInclusiveSet" type="tns:VSOptionInclusiveSetType" /> 
    </xs:sequence> 
    <xs:attribute name="tmp" type="xs:string" /> <!-- this is all I have added (for each of the types in the exception message) --> 
    </xs:complexType> 
    <xs:complexType name="VSOptionInclusiveSetType"> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="SetID" type="ns2:IdentifierType" /> 
     <xs:element minOccurs="0" name="NumberOfOptionsNumeric" type="xs:decimal" /> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="VSOption2" type="tns:VSOption2Type" /> 
    </xs:sequence> 
    </xs:complexType> 

La única cosa que añadir el atributo ficticio logrado era reducir el tiempo de compilación de el proyecto de minutos a segundos.

Aparte de esto, el VS2008 no pareció notar los cambios. Todavía no puedo serializar el objeto o crear una instancia del servicio sin obtener la excepción mencionada anteriormente, ¿qué me estoy perdiendo o haciendo mal?

+0

Solo una pregunta de comprobación, ya que parece que ha implementado exactamente la solución recomendada en las publicaciones vinculadas. ¿Es posible que el problema con VSInclusivesOptionType se haya resuelto y que ahora esté trabajando contra anidamientos de los otros (3) tipos de datos a los que se hace referencia en el mensaje de error? (VSOptionConflictSetType; ColorRequirementSetType; ColorExclusionSetType)? – dcbyers

+0

@dcbyers Implementé los cambios anteriores para los 4 tipos. –

Respuesta

7

Tiene que cambiar el archivo XSD como en mi pregunta, pero TAMBIÉN tiene que modificar el archivo Reference.cs (o .vb) en la misma carpeta - Hice una búsqueda de reemplazo en [] [] con [] (o()() con() en vb.net).

En todas las lecturas que he hecho, no hay respuestas que me hayan dicho que hagan ambas cosas, así que me perdí de vista: espero que esta respuesta ayude a los demás.

+0

Gracias por esa pregunta y respuesta. Aquí en 2016 el error todavía existe :) – dariol

5

Tiene razón, es un error en la herramienta WSDL. Para corregir el error, debe abrir los archivos generados y cambiar algunos de los 'TestStarXML.wsStarService.VSOptionConflictSetType' a 'TestStarXML.wsStarService.VSOptionConflictSetType []'.

Al ejecutar, puede encontrar fácilmente cuáles. Cuando haya cambiado los tipos, su servicio funcionará bien.

+0

Parece que (como puede ver) no hay [] en el archivo. Entonces, ¿no se trata simplemente de eliminarlos? –

+0

¿Qué archivo debería estar editando? –

+1

reference.cs es el archivo, o si lo ha generado a mano (herramienta wsdl), debe editar el archivo de salida. No estoy seguro de si debe agregar o quitar el []. Como recuerdo correctamente, estaba en una línea de definición de clase. – Peter

Cuestiones relacionadas