2012-05-09 8 views
9

Zostałem poproszony o wysłanie danych do usługi internetowej innej firmy, dostarczyły test usługa, która ma działać z klientem Java, jednak nie działa w .Net.Jak poprawnie zmodyfikować wygenerowany XSD w celu przezwyciężenia znanego błędu .Net, który powoduje wyjątek "cs0030: Nie można wygenerować tymczasowej klasy"

Kiedy generowania serwera proxy usługi i albo instancję usługi lub serialise obiektu żądania, pojawia się następujący błąd:

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[]' 

3rd Party, który wysłał nam ta usługa korzysta z Java, i nie mieli problemu generowanie proxy usługi z usługi testowej. Do tej pory zrozumiałem, że w .Net (see here) występuje błąd generowania XSD dla pliku WSDL.

odpowiedź here, wspomina modyfikując wygenerowane XSD z manekina atrybutów, więc dodałem atrybut obojętne jak sugeruje:

<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> 

Jedyne dodanie obojętne atrybut osiągnięty było skrócić czas kompilacji z projekt od minut do sekund.

Poza tym VS2008 wydawał się nie zauważać zmian - nadal nie mogę serializować obiektu ani tworzyć usługi bez uzyskania wyjątku wymienionego powyżej, czego mi brakuje lub robię źle?

+0

Po prostu pytanie kontrolne, ponieważ wygląda na to, że zaimplementowano dokładnie rozwiązanie zalecane w połączonych wiadomościach. Czy jest możliwe, że problem z VSInclusivesOptionType został rozwiązany i obecnie pracujesz przeciwko zagnieżdżeniu innych (3) typów danych przywoływanych w komunikacie o błędzie? (VSOptionConflictSetType; ColorRequirementSetType; ColorExclusionSetType)? – dcbyers

+0

@dcbyers Zaimplementowałem powyższe zmiany dla wszystkich 4 typów. –

Odpowiedz

7

Musisz zmienić plik XSD jak w moim pytaniu, ale TAKŻE musisz zmodyfikować plik Reference.cs (lub .vb) w tym samym folderze - Znalazłem zamień na [] [] na [] (lub()() z() w vb.net).

W całym czytaniu, które zrobiłem, żadna odpowiedź nie mówi, że robię jedno i drugie, więc właśnie przegapiłem punkt - mam nadzieję, że ta odpowiedź pomaga innym.

+0

Dziękuję za to pytanie i odpowiedź. Tu w 2016 błąd nadal istnieje :) – dariol

5

Masz rację, jest to błąd narzędzia WSDL. Aby naprawić błąd, powinieneś otworzyć wygenerowane pliki i zmienić niektóre z "TestStarXML.wsStarService.VSOptionConflictSetType" na "TestStarXML.wsStarService.VSOptionConflictSetType []".

Podczas biegania można łatwo znaleźć, które z nich. Po zmianie typów usługa będzie działać poprawnie.

+0

Wygląda na to, że (jak widać) w pliku nie ma []. Więc nie jest to po prostu ich usunięcie? –

+0

Który plik powinienem edytować? –

+1

plik reference.cs jest plikiem lub jeśli został wygenerowany ręcznie (narzędzie WSDL), należy poddać edycji wyjściowy plik put. Nie jestem pewien, czy musisz dodać lub usunąć []. Jak dobrze pamiętam, był to wiersz definicji klasy. – Peter

Powiązane problemy