xml - tutorial - xsd schema erstellen



Warum gleicht Microsoft beim Importieren von WSDL eine XSD xs: Ganzzahl mit einer Zeichenfolge ab? (1)

Dies stellt sich als eine überraschend gute Frage heraus, die einige Feinheiten von XSD berührt und wie man sie einer .NET-Sprache wie C # oder VB.NET zuordnen kann.

Der XSD-Typ in Ihrer WSDL hat den Typ xs:integer . Die XML-Schema-Spezifikation definiert xs: integer als unbegrenzt . Dies im Gegensatz zu xs: int, das auf 32 Bit beschränkt ist .

Wenn Ihre WSDL stattdessen xs:int verwenden würde, würden Sie das WSDL- Int32 finden, das es einem Int32 .

Während Implementierungen Beschränkungen für xs:integer auferlegen können, indem z. B. der Bereich durch die Wortgröße eines Rechners (der beliebig groß sein kann ) begrenzt wird, empfiehlt es sich, "liberal zu sein, was Sie akzeptieren und konservativ zu sein was du sendest " .

Da .NET bis vor kurzem keinen nativen BigInteger- Typ hatte, ist die einzige Möglichkeit, den gesamten Wertebereich von xs:intger zu senden oder zu empfangen, ein Datentyp, der unbegrenzte Bereiche erlaubt und string auswählt. Ich mag einen Datentyp bevorzugt haben, der selbst darauf beschränkt ist, nur Ziffern zu akzeptieren, aber es gibt etwas zu sagen, dass sie einen Core-Datentyp gewählt haben.

Sie wenden aus verschiedenen Gründen ähnliche Methoden auf andere Datentypen an. Zum Beispiel könnte gYearMonth einem DateTime Typ zugeordnet sein und die anderen Werte beim Senden auf Null setzen. Aber wieder wählten sie string .

Hier finden Sie eine vollständige Liste der Zuordnungen , die Microsoft beim Importieren von WSDL verwendet.

auf ihrer Seite, dh Server, werden sie die Zeichenfolge in eine ganze Zahl werfen? richtig?

Nein. Es funktioniert ungefähr wie folgt:

  • Ihr Datentyp wird gegen die Facetten des Typs validiert, dies geschieht auf Ihrer Seite, daher können Sie keinen Wert von "john" senden
  • Nach der Validierung werden die Typen unter Verwendung des SOAP-Protokolls serialisiert
  • Die Daten werden über die Leitung gesendet
  • Die Daten werden von jedem System empfangen, das sie verwenden, das auch das SOAP-Protokoll versteht
  • Die Daten werden anhand des Schemas validiert
  • Die Daten werden in jedem beliebigen Typ deserialisiert, den die Programmierer auf der anderen Seite als nützlich empfunden haben, abhängig von den Werkzeugen oder ob sie das Mapping von Hand manipuliert haben. Wenn sie WCF verwendet haben, wird dies wieder eine Zeichenfolge sein, es sei denn, sie haben die Standardwerte geändert.
  • Die Daten werden gegen die Geschäftslogik validiert (falls vorhanden)
  • Geschäftslogik wird ausgeführt
  • .... einige andere Schritte und schließlich wird die SOAP-Antwort gesendet

Betrachten Sie die WDSL auf einem Webservice. Das XML gibt an, dass der Datentyp eine Ganzzahl ist. Beim Aufrufen der Webmethode erwartet die Methode jedoch eine Zeichenfolge und den folgenden WDSL-Code

<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType:="integer", Order:=0)> _

Public Property ID() As String
    Get
        Return Me.ID
    End Get
    Set(value As String)
        Me.ID= value
    End Set
End Property

Ist das richtig? Ich bin verwirrt, warum es eine Zeichenfolge benötigt, um übergeben zu werden, wenn die Serialisierung den Typ in einer Ganzzahl sagt?

Meine Erfahrung sagt mir, dass auf ihrer Seite Server, dass sie die Zeichenfolge in eine ganze Zahl werfen werden? richtig?

Vielen Dank





wsdl