Como posso modificar corretamente um XSD gerado para superar um bug conhecido do .Net que cause a exceção “cs0030: Incapaz de gerar uma classe temporária”
Fui encarregado de enviar dados para um serviço da web de terceiros, eles forneceram um serviço de teste que é comprovado que funciona com um cliente Java, mas não no .Net.
Quando eu gero o proxy de serviço e instancio o serviço ou serializo o objeto de solicitação, recebo o seguinte erro:
<code>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[]' </code>
A terceira parte que nos enviou esse serviço usa Java e não teve problemas para gerar o proxy de serviço do serviço de teste. Meu entendimento até agora é que existe um bug no .Net (Veja aqui) gerando o XSD para o arquivo WSDL.
Na respostaAqui, menciona modificar o XSD gerado com atributos fictícios, então adicionei o atributo fictício como sugerido:
<code><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> </code>
A única coisa que adicionava o atributo fictício obtido era reduzir o tempo de compilação do projeto de minutos para segundos.
Além disso, o VS2008 não pareceu notar as alterações - ainda não consigo serializar o objeto ou instanciar o serviço sem obter a exceção mencionada acima, o que estou perdendo ou fazendo errado?