Wie mache ich einen dotnet-Webservice, der minOccurs="1" auf einen String-Wert setzt

8

Ich habe eine XSD:

%Vor%

Was ich mit XSD.exe v2.0.50727.3615 in eine C # -Klasse umgewandelt habe, die Code wie folgt erzeugt

%Vor%

Ich gebe ein A.A-Objekt in meinem Webservice zurück, das dieses Snippet in der Servicebeschreibung erstellt.

%Vor%

Die Änderung von minOccrus="1" in der XSD zu minOccurs="0" in der automatisch generierten WSDL verursacht Kummer an die Maschine am anderen Ende des Systems.

Ich könnte natürlich eine handbearbeitete WSDL für sie bereitstellen, aber ich möchte, dass die automatisch generierte WSDL ihren Bedürfnissen entspricht.

Irgendwelche Vorschläge, wie man dotnet davon überzeugen kann, minOccurs="1" für einen String-Typ in seinen automatisch generierten WSDLs auszugeben, ohne nillable="true" hinzuzufügen?

    
Simon Withers 18.10.2010, 16:19
quelle

3 Antworten

6

Ich notiere die folgende Zeile:

Für das Binden von komplexen XML-Schema-Typen mit nicht-XML-spezifischen Klassen bietet .NET Framework keine direkte Programmiersprache, die dem Attribut minOccurs oder maxOccurs entspricht.

von hier: Ссылка

    
ChrisG 19.02.2014, 11:03
quelle
8

Referenzen

Nach MSDN MinOccurs Attribut Binding Support , dort Es gibt nur 2 Möglichkeiten, MinOccurs = 1 zu erhalten.

  1. Werttyp ohne Standardwert oder begleitendes boolesches Feld.

      

    Ergebnis: Der minOccurs-Wert des Ausgabeelements wird auf 1

    festgelegt
  2. Referenztyp mit der IsNullable-Eigenschaft eines XmlElement-Attributs, die auf "true" gesetzt ist.

      

    Ergebnis: Der minOccurs-Wert des Ausgabeelements ist auf 1 festgelegt. Im Element ist das Nillable-Attribut ebenfalls auf "True" gesetzt.

Eine Eigenschaft vom Typ string hat (leider) immer einen Standardwert von

%Vor%

es kann also niemals einen null Standardwert haben. Dies bedeutet, dass wir die erste Lösung niemals erfüllen können. Die einzige Möglichkeit, ein MinOccurs = 1 für Strings zu generieren, besteht darin, das Element nullwertig zu machen:

C #

%Vor%

VB

%Vor%

Lösung

Die einzige wirkliche Lösung ist, die XSD manuell zu bearbeiten ... boo xsd.exe.

Weitere schlechte Nachrichten

Selbst wenn es möglich wäre, knüpfte Nick DeVore an John Sooers Antwort in einem anderen Thread, der besagt, dass das Feld nicht für eingehende XMLs verwendet wird. Es ist also immer noch möglich, dass der Benutzer ungültiges XML sendet.

    
Rapps 06.06.2013 20:05
quelle
1

Nach den Antworten auf diese SO Frage, ist es nicht möglich. John Saunders sagt:

  

Es stellt sich heraus, dass die WSDL nicht verwendet wird   um eingehende XML zu validieren. Es würde nicht   Egal, ob Sie es könnten oder nicht   gib minOccurs an - das wäre es nicht   verwendet, um die Eingabe zu validieren.

    
Nick DeVore 04.11.2010 15:23
quelle

Tags und Links