Metadati del servizio
L'host del servizio WWSAPI supporta WS-MetadataExchange per i relativi 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 nel WS_SERVICE_HOST.
- Specificare il nome del servizio nella proprietà WS_SERVICE_METADATA nel WS_SERVICE_HOST.
- Specificare la porta per i singoli endpoint usando la proprietà WS_SERVICE_ENDPOINT_PROPERTY_METADATA nel WS_SERVICE_ENDPOINT.
- Abilitare una o più strutture WS_SERVICE_ENDPOINT per gestire le richieste di WS-MetadataExchange.
- Facoltativamente, specificare WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_URL_SUFFIX nell'enumerazione WS_SERVICE_ENDPOINT_PROPERTY_ID per la manutenzione Ws-MetadataExchange richieste in un indirizzo specifico.
Specifica di documenti di metadati/nome del servizio nell'host del servizio
Il primo passaggio consiste nel specificare i documenti di 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. Questa proprietà viene specificata tramite la proprietà WS_SERVICE_PROPERTY_METADATA.
Facoltativamente, un'applicazione può anche specificare il nome del servizio e lo spazio dei nomi come parte del WS_SERVICE_METADATA. Se il documento di metadati non specifica l'elemento del servizio per il nome del servizio specificato, il modello di servizio genererà un elemento 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 nei documenti non verrà eseguita alcuna verifica dei singoli documenti di metadati. È 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 funzionalità per l'applicazione per aggiungere un elemento di servizio per suo conto se non ne è già stato specificato uno. Per abilitare questo comportamento, un'applicazione deve specificare campi serivceName e serviceN nella struttura WS_SERVICE_METADATA. Se serviceName e serviceN sono entrambi NULL non viene aggiunto alcun elemento del servizio al documento WSDL. Entrambi vengono usati per identificare il documento in cui verrà aggiunto serviceElement.
Se WS_SERVICE_PROPERTY_METADATA proprietà non viene specificata alcuna eccezione di metadati verrà eseguita nell'host del servizio.
Specifica della porta sul 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 dell'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 questo valore per conto dell'applicazione.
Abilitare la manutenzione di WS-MetadataExchange in WS_SERVICE_ENDPOINT
Per gestire le richieste di WS-MetadataExchange, l'host del servizio deve avere almeno un endpoint abilitato per la manutenzione WS-MetadataExchange richieste. Questa operazione viene eseguita impostando la versione appropriata per WS-MetadataExchange nel 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 gestire le richieste HTTP GET, l'host del servizio deve avere almeno un endpoint abilitato per la manutenzione WS-MetadataExchange richieste. Questa operazione viene eseguita impostando la versione appropriata per WS-MetadataExchange nel 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 di richieste di WS-MetadataExchange in un percorso specifico. A tale scopo, specificare un suffisso per il WS_SERVICE_ENDPOINT specificato. Questo suffisso è concatenato as-is all'URL effettivo per il WS_SERVICE_ENDPOINT. La stringa concatenata viene usata come URL corrispondente all'intestazione 'to' ricevuta.
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. |