Wie kann ich eine generierte XSD korrekt ändern, um einen bekannten .Net-Fehler zu beheben, der die Ausnahme "cs0030: Temporäre Klasse kann nicht generiert werden" verursacht?
Ich wurde beauftragt, Daten an einen Webdienst eines Drittanbieters zu senden. Es wurde ein Testdienst bereitgestellt, der nachweislich mit einem Java-Client funktioniert, in .Net jedoch nicht.
Wenn ich den Serviceproxy generiere und entweder den Service instanziiere oder das Anforderungsobjekt serialisiere, wird die folgende Fehlermeldung angezeigt:
<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>
Der Drittanbieter, der uns diesen Service gesendet hat, verwendet Java und konnte den Service-Proxy problemlos aus dem Test-Service generieren. Mein bisheriges Verständnis ist, dass es einen Fehler in .Net gibt (siehe hier) Generieren der XSD für die WSDL-Datei.
In der AntwortHierEs wird erwähnt, dass die generierte XSD mit Dummy-Attributen modifiziert wurde. Deshalb habe ich das Dummy-Attribut wie vorgeschlagen hinzugefügt:
<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>
Das einzige, was mit dem Dummy-Attribut erreicht wurde, war die Verkürzung der Kompilierzeit des Projekts von Minuten auf Sekunden.
Abgesehen davon schien VS2008 die Änderungen nicht zu bemerken - ich kann das Objekt immer noch nicht serialisieren oder den Service instanziieren, ohne die oben erwähnte Ausnahme zu erhalten. Was fehlt oder mache ich falsch?