Jak mogę poprawnie zmodyfikować wygenerowany XSD, aby przezwyciężyć znany błąd .Net, który powoduje wyjątek „cs0030: Nie można wygenerować klasy tymczasowej”
Otrzymałem zadanie wysyłania danych do usługi internetowej innej firmy, udostępnili usługę testową, która, jak udowodniono, działa z klientem Java, jednak nie działa w .Net.
Gdy generuję proxy usługi i inicjuję usługę lub serializuję obiekt żądania, pojawia się następujący błąd:
<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>
Strona trzecia, która wysłała nam tę usługę, korzysta z Javy i nie mieli problemu z wygenerowaniem proxy usługi z usługi testowej. Do tej pory rozumiem, że jest błąd w .Net (Spójrz tutaj) generowanie XSD dla pliku WSDL.
W odpowiedzitutaj, wspomina o modyfikacji wygenerowanego XSD z atrapami, więc dodałem atrapę jako sugerowaną:
<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>
Jedyną rzeczą dodaną do atrybutu atrapy było skrócenie czasu kompilacji projektu z minut na sekundy.
Poza tym VS2008 najwyraźniej nie zauważył zmian - nadal nie mogę serializować obiektu ani tworzyć instancji usługi bez uzyskania wspomnianego powyżej wyjątku, czego brakuje lub co robię źle?