Partager via


Métadonnées du service

L’hôte de service WWSAPI prend en charge WS-MetadataExchange pour ses points de terminaison. Vous activez cet échange de métadonnées sur l’hôte de service en procédant comme suit :

Spécification des documents de métadonnées/nom du service sur l’hôte de service

La première étape consiste à spécifier les documents de métadonnées sur l’hôte de service. Pour ce faire, rassemblez les documents individuels sous la forme d’un tableau de WS_XML_STRING*. Ces chaînes peuvent être un schéma XML, WSDL ou WS-Policy document. Cette valeur est spécifiée par le biais de la propriété WS_SERVICE_PROPERTY_METADATA .

Si vous le souhaitez, une application peut également spécifier le nom du service et l’espace de noms dans le cadre de la WS_SERVICE_METADATA. Si le document de métadonnées ne spécifie pas l’élément de service pour le nom de service donné, le modèle de service génère un élément de service avec les ports WSDL correspondants pour le service.

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);

Notez qu’aucune vérification des documents de métadonnées individuels n’est effectuée sur les documents. Il incombe à l’application de valider le contenu des documents et de s’assurer que tous les chemins d’accès des importations sont relativement spécifiés.

L’espace de noms spécifié est utilisé pour localiser le document dans lequel l’élément de service sera ajouté par l’hôte de service.

Ajout d’un élément de service au document WSDL

L’hôte de service permet à l’application d’ajouter un élément de service en son nom si aucun élément n’est déjà spécifié. Pour activer ce comportement, une application doit spécifier les champs serivceName et serviceNs sur la structure WS_SERVICE_METADATA . Si serviceName et serviceN sont tous deux NULL , aucun élément de service n’est ajouté au document WSDL. Ces deux éléments sont utilisés pour identifier le document dans lequel le serviceElement va être ajouté.

Si WS_SERVICE_PROPERTY_METADATA propriété n’est pas spécifiée, aucun exhange de métadonnées n’aura lieu sur l’hôte de service.

Spécification du port sur le WS_SERVICE_ENDPOINT

Pour qu’une WS_SERVICE_ENDPOINT soit disponible en tant que port à l’intérieur de l’élément de service dans le document WSDL, l’application doit spécifier WS_SERVICE_ENDPOINT_PROPERTY_METADATA propriété sur celui-ci.

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);

Il est supposé que la référence au nom de liaison et à l’espace de noms existe dans les documents spécifiés sur l’hôte de service dans le cadre de WS_SERVICE_PROPERTY_METADATA. Le runtime ne vérifie pas cela au nom de l’application.

Activer la maintenance WS-MetadataExchange sur WS_SERVICE_ENDPOINT

Pour pouvoir traiter WS-MetadataExchange demandes, l’hôte de service doit avoir au moins un point de terminaison activé pour la maintenance des demandes WS-MetadataExchange. Pour ce faire, définissez la version appropriée pour WS-MetadataExchange sur le 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);

Activer la maintenance HTTP GET sur WS_SERVICE_ENDPOINT

Pour pouvoir traiter les requêtes GETHTTP, l’hôte de service doit avoir au moins un point de terminaison activé pour la maintenance des demandes WS-MetadataExchange. Pour ce faire, définissez la version appropriée pour WS-MetadataExchange sur le 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);

Spécification du suffixe d’URL pour les demandes de Ws-MetadataExchange

Une application peut éventuellement activer uniquement l’acceptation des demandes de WS-MetadataExchange sur un chemin d’accès spécifique. Pour ce faire, spécifiez un suffixe pour le WS_SERVICE_ENDPOINT donné. Ce suffixe est concaténé en l’état à l’URL réelle du WS_SERVICE_ENDPOINT. La chaîne concaténée est utilisée comme URL correspondante à l’en-tête « to » reçu.

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);

Les éléments d’API suivants sont liés à service metada.

Énumération Description
WS_METADATA_EXCHANGE_TYPE Active ou désactive la maintenance WS-MetadataExchange et HTTP GET sur le point de terminaison.

 

Structure Description
WS_SERVICE_ENDPOINT_METADATA Représente l’élément port pour le point de terminaison.
WS_SERVICE_METADATA Spécifie le tableau des documents de métadonnées de service.
WS_SERVICE_METADATA_DOCUMENT Spécifie les documents individuels qui composent les métadonnées du service.