Metadati del servizio
L'host del servizio WWSAPI supporta WS-MetadataExchange per gli endpoint. È possibile abilitare tale scambio di metadati nell'host del servizio con la procedura seguente:
- Specificare i documenti dei metadati nella proprietà WS_SERVICE_METADATA nella WS_SERVICE_HOST.
- Specificare il nome del servizio nella proprietà WS_SERVICE_METADATA nella WS_SERVICE_HOST.
- Specificare la porta per singoli endpoint usando la proprietà WS_SERVICE_ENDPOINT_PROPERTY_METADATA nella WS_SERVICE_ENDPOINT.
- Abilitare una o più strutture WS_SERVICE_ENDPOINT per il servizio delle richieste di WS-MetadataExchange.
- Facoltativamente, specificare WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_URL_SUFFIX nell'enumerazione WS_SERVICE_ENDPOINT_PROPERTY_ID per la manutenzione delle richieste di Ws-MetadataExchange in un indirizzo specifico.
Specifica dei documenti metadati/nome del servizio nell'host del servizio
Il primo passaggio consiste nel specificare i documenti dei metadati nell'host del servizio. A tale scopo, raccogliere i singoli documenti come matrice di WS_XML_STRING*. Queste stringhe possono essere XML Schema, WSDL o WS-Policy documento. Viene specificato tramite la proprietà WS_SERVICE_PROPERTY_METADATA .
Facoltativamente, un'applicazione può anche specificare il nome e lo spazio dei nomi del servizio come parte della WS_SERVICE_METADATA. Se il documento dei metadati non specifica l'elemento del servizio per il nome del servizio specificato, il modello di servizio genererà un elemento del servizio con le porte WSDL corrispondenti per il servizio.
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);
Si noti che non verrà eseguita alcuna verifica dei singoli documenti di metadati nei documenti. È responsabilità dell'applicazione convalidare il contenuto dei documenti e assicurarsi che tutti i percorsi di importazione siano relativamente specificati.
Lo spazio dei nomi specificato viene usato per individuare il documento in cui verrà aggiunto l'elemento del servizio dall'host del servizio.
Aggiunta dell'elemento di servizio al documento WSDL
L'host del servizio fornisce la struttura per l'applicazione per aggiungere un elemento di servizio per conto di se non è già specificato. Per abilitare questo comportamento, un'applicazione deve specificare campi serivceName e serviceN nella struttura WS_SERVICE_METADATA . Se serviceName e serviceNs non sono entrambi NULL nessun elemento di servizio viene aggiunto al documento WSDL. Entrambi questi vengono usati per identificare il documento in cui verrà aggiunto serviceElement.
Se la proprietà WS_SERVICE_PROPERTY_METADATA non viene specificata nessuna istanza di metadati verrà eseguita nell'host del servizio.
Specifica della porta nel WS_SERVICE_ENDPOINT
Affinché un WS_SERVICE_ENDPOINT sia disponibile come porta all'interno dell'elemento del servizio nel documento WSDL, l'applicazione deve specificare WS_SERVICE_ENDPOINT_PROPERTY_METADATA proprietà.
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);
Si presuppone che il riferimento al nome di associazione e allo spazio dei nomi esista nei documenti specificati nell'host del servizio come parte di WS_SERVICE_PROPERTY_METADATA. Il runtime non verifica questa operazione per conto dell'applicazione.
Abilitare WS-MetadataExchange manutenzione in WS_SERVICE_ENDPOINT
Per eseguire il servizio WS-MetadataExchange richieste, l'host del servizio deve avere almeno un endpoint abilitato per la manutenzione di WS-MetadataExchange richieste. Questa operazione viene eseguita impostando la versione appropriata per WS-MetadataExchange nella 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);
Abilitare la manutenzione HTTP GET in WS_SERVICE_ENDPOINT
Per eseguire il servizio richiesteHTTP GET, l'host del servizio deve avere almeno un endpoint abilitato per la manutenzione di WS-MetadataExchange richieste. Questa operazione viene eseguita impostando la versione appropriata per WS-MetadataExchange nella 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);
Specifica del suffisso URL per le richieste di Ws-MetadataExchange
Un'applicazione può facoltativamente abilitare solo l'accettazione delle richieste di WS-MetadataExchange in un percorso specifico. Questa operazione viene eseguita specificando un suffisso per il WS_SERVICE_ENDPOINT specificato. Questo suffisso è concatenato come corrisponde all'URL effettivo per l'WS_SERVICE_ENDPOINT. La stringa concatenata viene usata come URL corrispondente all'intestazione "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);
Gli elementi API seguenti sono correlati alla metada del servizio.
Enumerazione | Descrizione |
---|---|
WS_METADATA_EXCHANGE_TYPE | Abilita o disabilita WS-MetadataExchange e la manutenzione HTTP GET nell'endpoint. |
Struttura | Descrizione |
---|---|
WS_SERVICE_ENDPOINT_METADATA | Rappresenta l'elemento porta per l'endpoint. |
WS_SERVICE_METADATA | Specifica la matrice di documenti dei metadati del servizio. |
WS_SERVICE_METADATA_DOCUMENT | Specifica i singoli documenti che costituiscono i metadati del servizio. |