struktur WS_STRUCT_DESCRIPTION (webservices.h)

Informasi tentang jenis struct C, dan cara memetakannya ke elemen XML. Ini digunakan dengan WS_STRUCT_TYPE.

Sintaks

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;

Anggota

size

Ukuran struktur, dalam byte.

alignment

Persyaratan penyelarasan struktur. Ini harus menjadi kekuatan dua antara 1 dan 8.

fields

Array pointer ke deskripsi bidang struktur.

Lihat bagian Keterangan untuk informasi tentang urutan bidang dalam array ini.

fieldCount

Jumlah bidang dalam array bidang. Bagian mana pun dari struktur yang tidak diwakili oleh bidang akan dibiarkan tidak diinisialisasi. Tidak ada dua deskripsi bidang yang dapat mereferensikan offset struktur yang sama.

typeLocalName

Nama jenis XML struktur. Ini hanya digunakan ketika struktur berasal dari struktur lain, dan mungkin NULL sebaliknya.

typeNs

Namespace tipe XML dari struktur. Ini hanya digunakan ketika struktur berasal dari struktur lain, dan mungkin NULL sebaliknya.

parentType

Jenis jenis ini berasal dari. Ini hanya digunakan ketika struktur berasal dari struktur lain, dan mungkin NULL sebaliknya.

subTypes

Array pointer ke jenis turunan. Ini hanya digunakan ketika struktur berasal dari struktur lain, dan mungkin NULL sebaliknya.

subTypeCount

Jumlah jenis dalam array subTypes. Ini hanya digunakan ketika struktur berasal dari struktur lain, dan mungkin NULL sebaliknya.

structOptions

Keterangan

Berikut ini adalah tata bahasa yang menjelaskan urutan bidang dalam struktur. Urutan ditentukan berdasarkan bidang pemetaan setiap 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

Perhatikan bahwa deskripsi bidang struktur diserialisasikan dan dideserialisasi dalam urutan yang ditentukan. Proses deserialisasi adalah "serakah", yaitu, sebanyak konten yang akan cocok dengan definisi deskripsi bidang tertentu akan digunakan sebelum deskripsi bidang berikutnya akan dipertimbangkan. Pendekatan ini menyelesaikan ambiguitas apa pun ketika konten dapat cocok dengan deskripsi bidang saat ini atau yang berikut.

Proses deserialisasi juga ketat. Semua konten harus dideserialisasi sesuai dengan deskripsi bidang. Secara default, elemen dan atribut yang tidak tertangani akan menyebabkan proses deserialisasi gagal. Namun, konten elemen berikutnya diabaikan dan dibuang saat bendera WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT diatur. Demikian pula, atribut yang tidak tertangani diabaikan dan dibuang saat bendera WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES diatur.

Perhatikan bahwa karena struktur WS_FIELD_DESCRIPTION menentukan lokasi bidang aktual dalam struktur menggunakan offset, tidak ada batasan untuk urutan aktual bidang dalam struktur.

Ketika satu struktur berasal dari (memperluas) yang lain, bidang untuk kedua struktur harus disertakan dalam deskripsi struktur turunan, dan tata bahasa di atas harus dipertahankan. Contohnya:

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

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 7 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 R2 [hanya aplikasi desktop]
Header webservices.h