Condividi tramite


WS_STRUCT_DESCRIPTION struttura (webservices.h)

Informazioni sul tipo di struct C e su come esegue il mapping a un elemento XML. Questa operazione viene usata con WS_STRUCT_TYPE.

Sintassi

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;

Members

size

Dimensioni della struttura, in byte.

alignment

Requisito di allineamento della struttura. Questa deve essere una potenza di due tra 1 e 8.

fields

Matrice di puntatori alle descrizioni dei campi della struttura.

Per informazioni sull'ordinamento dei campi in questa matrice, vedere la sezione Osservazioni.

fieldCount

Numero di campi nella matrice dei campi. Qualsiasi parte della struttura che non è rappresentata da un campo verrà lasciata non inizializzata. Nessuna descrizione di due campi può fare riferimento allo stesso offset della struttura.

typeLocalName

Nome del tipo XML della struttura. Questa operazione viene usata solo quando le strutture derivano da altre strutture e possono essere NULL in caso contrario.

typeNs

Spazio dei nomi dei tipi XML della struttura. Questa operazione viene usata solo quando le strutture derivano da altre strutture e possono essere NULL in caso contrario.

parentType

Il tipo da cui deriva questo tipo. Questa operazione viene usata solo quando le strutture derivano da altre strutture e possono essere NULL in caso contrario.

subTypes

Matrice di puntatori ai tipi derivati. Questa operazione viene usata solo quando le strutture derivano da altre strutture e possono essere NULL in caso contrario.

subTypeCount

Numero di tipi nella matrice subTypes. Questa operazione viene usata solo quando le strutture derivano da altre strutture e possono essere NULL in caso contrario.

structOptions

Commenti

Di seguito è riportata la grammatica che descrive l'ordine dei campi all'interno di una struttura. L'ordine viene definito in base al campo di mapping di ogni 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

Si noti che le descrizioni dei campi di una struttura vengono serializzate e deserializzate nell'ordine specificato. Il processo di deserializzazione è "greedy", ovvero il contenuto corrispondente alla definizione verrà utilizzata una descrizione di campo specifica prima che venga considerata la descrizione del campo successiva. Questo approccio risolve qualsiasi ambiguità quando il contenuto potrebbe corrispondere alla descrizione del campo corrente o a quella seguente.

Il processo di deserializzazione è anche restrittivo. Tutto il contenuto deve essere deserializzato in base alle descrizioni dei campi. Per impostazione predefinita, tutti gli elementi e gli attributi non gestiti causeranno l'esito negativo del processo di deserializzazione. Tuttavia, il contenuto finale dell'elemento viene ignorato ed eliminato quando viene impostato WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT flag. Analogamente, gli attributi non gestiti vengono ignorati ed eliminati quando viene impostato WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES flag.

Si noti che poiché le strutture WS_FIELD_DESCRIPTION determinano la posizione del campo effettivo all'interno della struttura usando un offset, non esiste alcuna restrizione in base all'ordine effettivo dei campi all'interno della struttura.

Quando una struttura deriva da (estende) un'altra, i campi per entrambe le strutture devono essere inclusi nella descrizione dello struct derivato e la grammatica precedente deve essere mantenuta. Ad esempio:

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

Requisiti

Requisito Valore
Client minimo supportato Windows 7 [solo app desktop]
Server minimo supportato Windows Server 2008 R2 [solo app desktop]
Intestazione webservices.h