Métadonnées de service
L’hôte de service WWSAPI prend en charge WS-MetadataExchange pour ses points de terminaison. Vous activez ces échanges de métadonnées sur l’hôte de service en procédant comme suit :
- Spécifiez des documents de métadonnées dans la propriété WS_SERVICE_METADATA sur la WS_SERVICE_HOST.
- Spécifiez le nom du service dans la propriété WS_SERVICE_METADATA sur la WS_SERVICE_HOST.
- Spécifiez le port des points de terminaison individuels à l’aide de la propriété WS_SERVICE_ENDPOINT_PROPERTY_METADATA sur la WS_SERVICE_ENDPOINT.
- Activez une ou plusieurs structures WS_SERVICE_ENDPOINT pour traiter les requêtes WS-MetadataExchange.
- Si vous le souhaitez, spécifiez WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_URL_SUFFIX dans l’énumération WS_SERVICE_ENDPOINT_PROPERTY_ID pour la maintenance des demandes de Ws-MetadataExchange sur une adresse spécifique.
Spécification de documents de métadonnées / nom de 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*s. Ces chaînes peuvent être xml Schema, WSDL ou WS-Policy document. Cela est spécifié 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 d’importation 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 de l’élément de service au document WSDL
L’hôte de service fournit la fonctionnalité permettant à l’application d’ajouter un élément de service pour son compte si elle n’est pas déjà spécifiée. Pour activer ce comportement, une application doit spécifier des 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 du service.
Spécification du port sur le WS_SERVICE_ENDPOINT
Pour qu’un 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 celle-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 pour le compte de l’application.
Activer WS-MetadataExchange maintenance sur WS_SERVICE_ENDPOINT
Pour traiter WS-MetadataExchange demandes, l’hôte de service doit avoir au moins un point de terminaison activé pour la maintenance des requêtes 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 WS-MetadataExchange demandes. 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 requêtes Ws-MetadataExchange
Une application peut éventuellement activer uniquement l’acceptation des demandes de WS-MetadataExchange sur un chemin spécifique. Pour ce faire, spécifiez un suffixe pour la WS_SERVICE_ENDPOINT donnée. Ce suffixe est concaténé as-is à l’URL réelle du WS_SERVICE_ENDPOINT. La chaîne concaténée est utilisée comme URL correspondante de l’en-tête « to » reçue.
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 au service metada.
Énumération | Description |
---|---|
WS_METADATA_EXCHANGE_TYPE | Active ou désactive WS-MetadataExchange et la maintenance HTTP GET sur le point de terminaison. |
Structure | Description |
---|---|
WS_SERVICE_ENDPOINT_METADATA | Représente l’élément de port du point de terminaison. |
WS_SERVICE_METADATA | Spécifie le tableau de documents de métadonnées de service. |
WS_SERVICE_METADATA_DOCUMENT | Spécifie les documents individuels qui composent les métadonnées du service. |