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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage