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?
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
@dcbyers Zaimplementowałem powyższe zmiany dla wszystkich 4 typów. –