Lire en anglais

Partager via


structure WS_STRUCT_DESCRIPTION (webservices.h)

Informations sur le type de struct C et la façon dont il est mappé à un élément XML. Il est utilisé avec WS_STRUCT_TYPE.

Syntaxe

typedef struct _WS_STRUCT_DESCRIPTION {
  ULONG                 size;
  ULONG                 alignment;
  WS_FIELD_DESCRIPTION  **fields;
  ULONG                 fieldCount;
  WS_XML_STRING         *typeLocalName;
  WS_XML_STRING         *typeNs;
  WS_STRUCT_DESCRIPTION *parentType;
  WS_STRUCT_DESCRIPTION **subTypes;
  ULONG                 subTypeCount;
  ULONG                 structOptions;
} WS_STRUCT_DESCRIPTION;

Membres

size

Taille de la structure, en octets.

alignment

Exigence d’alignement de la structure. Il doit s’agir d’une puissance de deux entre 1 et 8.

fields

Tableau de pointeurs vers les descriptions des champs de la structure.

Pour plus d’informations sur l’ordre des champs de ce tableau, consultez la section Remarques.

fieldCount

Nombre de champs dans le tableau de champs. Toute partie de la structure qui n’est pas représentée par un champ sera laissée non initialisée. Aucune description de deux champs ne peut référencer le même décalage de la structure.

typeLocalName

Nom de type XML de la structure. Il est utilisé uniquement lorsque les structures dérivent d’autres structures et peuvent avoir la valeur NULL dans le cas contraire.

typeNs

Espace de noms de type XML de la structure. Il est utilisé uniquement lorsque les structures dérivent d’autres structures et peuvent avoir la valeur NULL dans le cas contraire.

parentType

Type dont ce type est dérivé. Il est utilisé uniquement lorsque les structures dérivent d’autres structures et peuvent avoir la valeur NULL dans le cas contraire.

subTypes

Tableau de pointeurs vers des types dérivés. Il est utilisé uniquement lorsque les structures dérivent d’autres structures et peuvent avoir la valeur NULL dans le cas contraire.

subTypeCount

Nombre de types dans le tableau subTypes. Il est utilisé uniquement lorsque les structures dérivent d’autres structures et peuvent avoir la valeur NULL dans le cas contraire.

structOptions

Remarques

Voici la grammaire décrivant l’ordre des champs au sein d’une structure. L’ordre est défini en fonction du champ de mappage de chaque WS_FIELD_DESCRIPTION.


Fields := TypeAttributeField? AttributeField* ContentFields UnmappedFields*
ContentFields := TextContentField | ElementContentFields
ElementContentFields := ElementContentField* ? AnyElementField?
ElementContentField := ElementField | RepeatingElementField | ElementChoiceField | RepeatingElementChoiceField
ElementField := WS_ELEMENT_FIELD_MAPPING
RepeatingElementField := WS_REPEATING_ELEMENT_FIELD_MAPPING
ElementChoiceField := WS_ELEMENT_CHOICE_FIELD_MAPPING
RepeatingElementChoiceField := WS_REPEATING_ELEMENT_CHOICE_FIELD_MAPPING
AnyElementField := WS_ANY_ELEMENT_FIELD_MAPPING
TextContentField := WS_TEXT_FIELD_MAPPING
UnmappedField := WS_NO_FIELD_MAPPING
TypeAttributeField := WS_TYPE_ATTRIBUTE_FIELD_MAPPING
AttributeField := WS_ATTRIBUTE_FIELD_MAPPING

Notez que les descriptions de champs d’une structure sont sérialisées et désérialisées dans l’ordre spécifié. Le processus de désérialisation est « gourmand », c’est-à-dire autant de contenu que correspondra à la définition qu’une description de champ spécifique sera consommée avant que la description de champ suivante ne soit prise en compte. Cette approche résout toute ambiguïté lorsque le contenu peut correspondre à la description de champ actuelle ou à une description suivante.

Le processus de désérialisation est également restrictif. Tout le contenu doit être désérialisé en fonction des descriptions des champs. Par défaut, tous les éléments et attributs non gérés entraînent l’échec du processus de désérialisation. Toutefois, le contenu de fin de l’élément est ignoré et ignoré lorsque WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT indicateur est défini. De même, les attributs non gérés sont ignorés et ignorés lorsque WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES indicateur est défini.

Notez que, étant donné que les structures WS_FIELD_DESCRIPTION déterminent l’emplacement du champ réel dans la structure à l’aide d’un décalage, il n’existe aucune restriction quant à l’ordre réel des champs au sein de la structure.

Lorsqu’une structure dérive de (étend) une autre structure, les champs des deux structures doivent être inclus dans la description de struct dérivée et la grammaire ci-dessus doit être conservée. Par exemple :

struct BaseStructure
{
    const WS_STRUCT_DESCRIPTION* _type;
    int baseAttribute;
    int baseElement;
};

// BaseStructure field descriptions:
//    WS_TYPE_ATTRIBUTE_FIELD_MAPPING       // _type
//    WS_ATTRIBUTE_FIELD_MAPPING            // baseAttribute
//    WS_ELEMENT_FIELD_MAPPING              // baseElement

struct DerivedStructure
{
    struct BaseStructure _base;
    int derivedAttribute;
    int derivedElement;
};

// DerivedStructure field descriptions:
//    WS_TYPE_ATTRIBUTE_FIELD_MAPPING       // _type
//    WS_ATTRIBUTE_FIELD_MAPPING            // baseAttribute
//    WS_ATTRIBUTE_FIELD_MAPPING            // derivedAttribute
//    WS_ELEMENT_FIELD_MAPPING              // baseElement
//    WS_ELEMENT_FIELD_MAPPING              // derivedElement

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 R2 [applications de bureau uniquement]
En-tête webservices.h