Metadata služby
Hostitel služby WWSAPI podporuje WS-MetadataExchange pro své koncové body. Tuto výměnu metadat povolíte na hostiteli služby pomocí následujícího postupu:
- Zadejte dokumenty metadat ve vlastnosti WS_SERVICE_METADATA v WS_SERVICE_HOST.
- Zadejte název služby ve vlastnosti WS_SERVICE_METADATA v WS_SERVICE_HOST.
- Zadejte port pro jednotlivé koncové body pomocí vlastnosti WS_SERVICE_ENDPOINT_PROPERTY_METADATA v WS_SERVICE_ENDPOINT.
- Povolte jednu nebo více WS_SERVICE_ENDPOINT struktur pro službu požadavků WS-MetadataExchange.
- Volitelně můžete zadat WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_URL_SUFFIX v WS_SERVICE_ENDPOINT_PROPERTY_ID výčtu pro obsluhu Ws-MetadataExchange požadavků na konkrétní adresu.
Zadání dokumentů metadat / názvu služby na hostiteli služby
Prvním krokem je zadání dokumentů metadat na hostiteli služby. Uděláte to tak, že jednotlivé dokumenty shromáždíte jako pole WS_XML_STRING*. Tyto řetězce mohou být schématu XML, WSDL nebo WS-Policy dokumentu. Toto je určeno prostřednictvím vlastnosti WS_SERVICE_PROPERTY_METADATA.
Volitelně může aplikace také zadat název služby a obor názvů jako součást WS_SERVICE_METADATA. Pokud dokument metadat nezadá element služby pro daný název služby, model služby vygeneruje prvek služby s odpovídajícími porty WSDL pro službu.
WS_SERVICE_METADATA_DOCUMENT document = {0};
WS_STRING documentName = WS_STRING_VALUE(L"a.wsdl");
document.name = &documentName;
document.content = &wsdlDocument
WS_SERVICE_METADATA_DOCUMENT** metadataDocuments [] = {&document};
WS_SERVICE_METADATA serviceMetadata = {0};
// Specify Metadata documents
serviceMetadata.count = WsCountOf(metadataDocuments);
serviceMetadata.documents = &metadataDocuments;
// Specify service name
serviceMetadata.serviceName = &serviceName;
serviceMetadata.serviceNs = &serviceNamespace;
WS_SERVICE_PROPERTY serviceProperties[1] = {0};
serviceProperties[0].id = WS_SERVICE_PROPERTY_METADATA;
serviceProperties[0].value = &serviceMetadata;
serviceProperties[0].ValueSize = sizeof(serviceMetadata);
Všimněte si, že u dokumentů nebude provedeno žádné ověření jednotlivých dokumentů metadat. Je zodpovědností aplikace ověřit obsah dokumentů a zajistit, aby byly všechny cesty importu poměrně zadané.
Zadaný obor názvů slouží k vyhledání dokumentu, ve kterém bude prvek služby přidán hostitelem služby.
Přidání elementu služby do dokumentu WSDL
Hostitel služby poskytuje aplikaci možnost přidat za něj prvek služby, pokud ještě není zadaný. Aby bylo možné toto chování povolit, musí aplikace zadat pole serivceName a serviceNs ve struktuře WS_SERVICE_METADATA. Pokud serviceName i serviceNs jsou NULL do dokumentu WSDL není přidán žádný prvek služby. Obě se používají k identifikaci dokumentu, ve kterém bude přidán serviceElement.
Pokud WS_SERVICE_PROPERTY_METADATA vlastnost není zadána žádná metadata exhange neprobíhá na hostiteli služby.
Určení portu na WS_SERVICE_ENDPOINT
Aby byla WS_SERVICE_ENDPOINT k dispozici jako port uvnitř elementu služby v dokumentu WSDL, musí aplikace zadat WS_SERVICE_ENDPOINT_PROPERTY_METADATA vlastnost.
WS_SERVICE_ENDPOINT_METADATA endpointPort = {0}
endpointPort.name = &portName;
endpointPort.bindingName = &bindingName;
endpointPort.bindingNs = &bindingNs;
WS_SERVICE_ENDPOINT_PROPERTY serviceProperties[1] = {0};
serviceProperties[0].id = WS_SERVICE_ENDPOINT_PROPERTY_METADATA;
serviceProperties[0].value = &endpointPort;
serviceProperties[0].valueSize = sizeof(endpointPort);
Předpokládá se, že odkaz na název vazby a obor názvů existuje v dokumentech zadaných na hostiteli služby jako součást WS_SERVICE_PROPERTY_METADATA. Modul runtime toto neověruje jménem aplikace.
Povolení údržby WS-MetadataExchange na WS_SERVICE_ENDPOINT
Aby bylo možné obsluhovat WS-MetadataExchange požadavky, musí mít hostitel služby povolený alespoň jeden koncový bod pro obsluhu WS-MetadataExchange požadavků. To se provádí nastavením příslušné verze pro WS-MetadataExchange na WS_SERVICE_ENDPOINT.
WS_METADATA_EXCHANGE_TYPE metadataExchangeType = WS_METADATA_EXCHANGE_TYPE_MEX;
WS_SERVICE_ENDPOINT_PROPERTY serviceProperties[1] = {0};
serviceProperties[0].id = WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_TYPE;
serviceProperties[0].value = &metadataExchangeType;
serviceProperties[0].ValueSize = sizeof(metadataExchangeType);
Povolení údržby HTTP GET na WS_SERVICE_ENDPOINT
Aby bylo možné požadavky GET serviceHTTP, musí mít hostitel služby povolený alespoň jeden koncový bod pro obsluhu WS-MetadataExchange požadavků. To se provádí nastavením příslušné verze pro WS-MetadataExchange na WS_SERVICE_ENDPOINT.
WS_METADATA_EXCHANGE_TYPE metadataExchangeType = WS_METADATA_EXCHANGE_TYPE_HTTP_GET;
WS_SERVICE_ENDPOINT_PROPERTY serviceProperties[1] = {0};
serviceProperties[0].id = WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_TYPE;
serviceProperties[0].value = &metadataExchangeType;
serviceProperties[0].ValueSize = sizeof(metadataExchangeType);
Zadání přípony ADRESY URL pro požadavky Ws-MetadataExchange
Aplikace může volitelně povolit pouze přijímání požadavků na WS-MetadataExchange na konkrétní cestě. To se provádí zadáním přípony pro danou WS_SERVICE_ENDPOINT. Tato přípona je zřetězena as-is na skutečnou adresu URL WS_SERVICE_ENDPOINT. Zřetězený řetězec se používá jako odpovídající adresa URL přijaté hlavičky "to".
const WS_STRING suffix = WS_STRING_VALUE(L"mex");
WS_SERVICE_ENDPOINT_PROPERTY serviceProperties[1] = {};
serviceProperties[0].id = WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_URL_SUFFIX;
serviceProperties[0].value = &suffix;
serviceProperties[0].valueSize = sizeof(suffix);
Následující prvky rozhraní API se vztahují k metadě služby.
Výčet | Popis |
---|---|
WS_METADATA_EXCHANGE_TYPE | Povolí nebo zakáže údržbu WS-MetadataExchange a HTTP GET na koncovém bodu. |
Struktura | Popis |
---|---|
WS_SERVICE_ENDPOINT_METADATA | Představuje prvek portu pro koncový bod. |
WS_SERVICE_METADATA | Určuje pole dokumentů metadat služby. |
WS_SERVICE_METADATA_DOCUMENT | Určuje jednotlivé dokumenty, které tvoří metadata služby. |