Sono stato incaricato di inviare dati a un servizio Web di terze parti, hanno fornito un test servizio che ha dimostrato di funzionare con un client Java, tuttavia, non in .Net.Come posso modificare correttamente un XSD generato per superare un bug .Net noto che causa un'eccezione "cs0030: impossibile generare una classe temporanea"
Quando ho generare il proxy del servizio e sia un'istanza del servizio o puntate l'oggetto di richiesta, ottengo il seguente errore:
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 terza parte che ci ha inviato questo servizio utilizza Java, e hanno avuto nessun problema generazione del proxy di servizio dal servizio di test. La mia comprensione finora è che c'è un bug in .Net (see here) che genera l'XSD per il file WSDL.
Nella risposta here, menziona modificando il XSD generato con attributi fittizi, quindi aggiunto l'attributo manichino come suggerito:
<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>
L'unica cosa aggiungendo l'attributo fittizio ottenuto era di ridurre il tempo di compilazione di il progetto da minuti a secondi.
Diversamente da questo, VS2008 non sembra aver notato i cambiamenti - Non riesco ancora a serializzare l'oggetto o creare un'istanza del servizio senza ottenere l'eccezione sopra menzionata, cosa mi manca o cosa non funziona?
Solo una domanda di controllo in quanto sembra che tu abbia implementato esattamente la soluzione raccomandata nei post collegati. È possibile che il problema con VSInclusivesOptionType sia stato risolto e che ora si stia lavorando contro i raggruppamenti degli altri (3) tipi di dati a cui si fa riferimento nel messaggio di errore? (VSOptionConflictSetType; ColorRequirementSetType; ColorExclusionSetType)? – dcbyers
@dcbyers Ho implementato le modifiche sopra per tutti e 4 i tipi. –