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?
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
@dcbyers Implementé los cambios anteriores para los 4 tipos. –