다음을 통해 공유


WS_STRUCT_DESCRIPTION 구조체(webservices.h)

C 구조체 형식 및 XML 요소에 매핑되는 방법에 대한 정보입니다. 이는 WS_STRUCT_TYPE 함께 사용됩니다.

구문

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;

멤버

size

구조체의 크기(바이트)입니다.

alignment

구조체의 맞춤 요구 사항입니다. 이는 1에서 8 사이의 두 가지 힘이어야 합니다.

fields

구조체의 필드에 대한 설명에 대한 포인터 배열입니다.

이 배열의 필드 순서에 대한 자세한 내용은 설명 섹션을 참조하세요.

fieldCount

필드 배열의 필드 수입니다. 필드로 표현되지 않는 구조체의 모든 부분은 초기화되지 않은 상태로 남습니다. 두 필드 설명은 구조체의 동일한 오프셋을 참조할 수 없습니다.

typeLocalName

구조체의 XML 형식 이름입니다. 이는 구조체가 다른 구조체에서 파생되는 경우에만 사용되며, 그렇지 않으면 NULL 일 수 있습니다.

typeNs

구조체의 XML 형식 네임스페이스입니다. 이는 구조체가 다른 구조체에서 파생되는 경우에만 사용되며, 그렇지 않으면 NULL 일 수 있습니다.

parentType

이 형식이 파생된 형식입니다. 이는 구조체가 다른 구조체에서 파생되는 경우에만 사용되며, 그렇지 않으면 NULL 일 수 있습니다.

subTypes

파생 형식에 대한 포인터의 배열입니다. 이는 구조체가 다른 구조체에서 파생되는 경우에만 사용되며, 그렇지 않으면 NULL 일 수 있습니다.

subTypeCount

subTypes 배열의 형식 수입니다. 이는 구조체가 다른 구조체에서 파생되는 경우에만 사용되며, 그렇지 않으면 NULL 일 수 있습니다.

structOptions

설명

다음은 구조체 내 필드의 순서를 설명하는 문법입니다. 순서는 각 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

구조체에 대한 필드 설명은 지정된 순서대로 직렬화되고 역직렬화됩니다. 역직렬화 프로세스는 "greedy"입니다. 즉, 다음 필드 설명을 고려하기 전에 특정 필드 설명이 사용되는 정의와 일치하는 만큼의 콘텐츠입니다. 이 방법은 콘텐츠가 현재 필드 설명 또는 다음 필드 설명과 일치할 수 있는 경우 모호성을 해결합니다.

역직렬화 프로세스도 제한적입니다. 모든 콘텐츠는 필드 설명에 따라 역직렬화되어야 합니다. 기본적으로 처리되지 않은 요소와 특성으로 인해 역직렬화 프로세스가 실패합니다. 그러나 WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT 플래그가 설정되면 요소의 후행 내용이 무시되고 삭제됩니다. 마찬가지로 처리되지 않은 특성은 WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES 플래그가 설정되면 무시되고 삭제됩니다.

WS_FIELD_DESCRIPTION 구조체는 오프셋을 사용하여 구조체 내의 실제 필드 위치를 결정하므로 구조체 내 필드의 실제 순서에 대한 제한은 없습니다.

한 구조체가 다른 구조체에서 파생되면 두 구조체에 대한 필드가 파생된 구조체 설명에 포함되어야 하며 위의 문법을 유지 관리해야 합니다. 예를 들어:

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

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 R2 [데스크톱 앱만 해당]
머리글 webservices.h