2012-05-09 9 views
9

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?

+0

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

+0

@dcbyers Ho implementato le modifiche sopra per tutti e 4 i tipi. –

risposta

7

Devi modificare il file XSD come nella mia domanda, ma devi ANCHE modificare il file Reference.cs (o .vb) nella stessa cartella - Ho fatto una sostituzione di ricerca su [] [] con [] (o()() con() in vb.net).

In tutte le letture che ho fatto, nessuna risposta ha detto di fare entrambe le cose, quindi ho appena perso il punto - spero che questa risposta aiuti gli altri.

+0

Grazie per questa domanda e risposta. Qui nel 2016 esiste ancora l'errore :) – dariol

5

Si è corretto, si tratta di un bug nello strumento WSDL. Per correggere il bug è necessario aprire i file generati e modificare alcuni di "TestStarXML.wsStarService.VSOptionConflictSetType" in "TestStarXML.wsStarService.VSOptionConflictSetType []".

Durante l'esecuzione è possibile trovare quali. Una volta modificati i tipi, il servizio verrà eseguito correttamente.

+0

Sembra che (come puoi vedere) non ci siano [] nel file. Quindi non si tratta semplicemente di rimuoverli? –

+0

Quale file dovrei modificare? –

+1

reference.cs è il file, oppure se hai generato a mano (strumento wsdl), dovresti modificare il file put out. Non sono sicuro se devi aggiungere o rimuovere []. Come ricordo bene, era in una linea di definizione di classe. – Peter