Metadane usługi
Host usługi WWSAPI obsługuje WS-MetadataExchange dla swoich punktów końcowych. Taką wymianę metadanych można włączyć na hoście usługi, wykonując następujące czynności:
- Określ dokumenty metadanych we właściwości WS_SERVICE_METADATA w WS_SERVICE_HOST.
- Określ nazwę usługi we właściwości WS_SERVICE_METADATA w WS_SERVICE_HOST.
- Określ port dla poszczególnych punktów końcowych przy użyciu właściwości WS_SERVICE_ENDPOINT_PROPERTY_METADATA w WS_SERVICE_ENDPOINT.
- Włącz co najmniej jedną struktury WS_SERVICE_ENDPOINT, aby obsługiwać żądania WS-MetadataExchange.
- Opcjonalnie określ WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_URL_SUFFIX w wyliczenie WS_SERVICE_ENDPOINT_PROPERTY_ID obsługi żądań Ws-MetadataExchange dla określonego adresu.
Określanie dokumentów metadanych/nazwy usługi na hoście usługi
Pierwszym krokiem jest określenie dokumentów metadanych na hoście usługi. Zrób to, zbierając poszczególne dokumenty jako tablicę WS_XML_STRING*. Te ciągi mogą być dokumentami schematu XML, WSDL lub WS-Policy. Jest to określane za pomocą właściwości WS_SERVICE_PROPERTY_METADATA.
Opcjonalnie aplikacja może również określić nazwę usługi i przestrzeń nazw w ramach WS_SERVICE_METADATA. Jeśli dokument metadanych nie określi elementu usługi dla danej nazwy usługi, model usługi wygeneruje element usługi z odpowiednimi portami WSDL dla usługi.
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);
Należy pamiętać, że na dokumentach nie zostanie przeprowadzona weryfikacja poszczególnych dokumentów metadanych. Obowiązkiem aplikacji jest zweryfikowanie zawartości dokumentów i upewnienie się, że wszystkie ścieżki importu są stosunkowo określone.
Określona przestrzeń nazw służy do lokalizowania dokumentu, w którym element usługi zostanie dodany przez hosta usługi.
Dodawanie elementu usługi do dokumentu WSDL
Host usługi zapewnia obsługę aplikacji w celu dodania elementu usługi w jego imieniu, jeśli nie został jeszcze określony. Aby włączyć to zachowanie, aplikacja musi określić pola serivceName i serviceNs w strukturze WS_SERVICE_METADATA. Jeśli parametr serviceName i serviceNs są null żaden element usługi nie zostanie dodany do dokumentu WSDL. Oba te elementy służą do identyfikowania dokumentu, w którym element usługi ma zostać dodany.
Jeśli właściwość WS_SERVICE_PROPERTY_METADATA nie zostanie określona, na hoście usługi nie zostaną wprowadzone żadne metadane exhange.
Określanie portu na WS_SERVICE_ENDPOINT
Aby WS_SERVICE_ENDPOINT był dostępny jako port wewnątrz elementu usługi w dokumencie WSDL, aplikacja musi określić właściwość WS_SERVICE_ENDPOINT_PROPERTY_METADATA na nim.
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);
Zakłada się, że odwołanie do nazwy powiązania i przestrzeni nazw istnieje w dokumentach określonych na hoście usługi w ramach WS_SERVICE_PROPERTY_METADATA. Środowisko uruchomieniowe nie weryfikuje tego w imieniu aplikacji.
Włączanie obsługi WS-MetadataExchange na WS_SERVICE_ENDPOINT
Aby obsługiwać żądania WS-MetadataExchange, host usługi musi mieć co najmniej jeden punkt końcowy włączony do obsługi żądań WS-MetadataExchange. W tym celu należy ustawić odpowiednią wersję dla WS-MetadataExchange w 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);
Włączanie obsługi protokołu HTTP GET w WS_SERVICE_ENDPOINT
Aby usługaHTTP GET żądań, host usługi musi mieć co najmniej jeden punkt końcowy włączony do obsługi żądań WS-MetadataExchange. W tym celu należy ustawić odpowiednią wersję dla WS-MetadataExchange w 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);
Określanie sufiksu adresu URL dla żądań Ws-MetadataExchange
Aplikacja może opcjonalnie włączyć tylko akceptowanie żądań dotyczących WS-MetadataExchange w określonej ścieżce. W tym celu należy określić sufiks dla danego WS_SERVICE_ENDPOINT. Ten sufiks jest połączony as-is z rzeczywistym adresem URL WS_SERVICE_ENDPOINT. Połączony ciąg jest używany jako pasujący adres URL do odebranego nagłówka "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);
Następujące elementy interfejsu API odnoszą się do metada usługi.
Wyliczenie | Opis |
---|---|
WS_METADATA_EXCHANGE_TYPE | Włącza lub wyłącza obsługę WS-MetadataExchange i HTTP GET w punkcie końcowym. |
Struktura | Opis |
---|---|
WS_SERVICE_ENDPOINT_METADATA | Reprezentuje element portu punktu końcowego. |
WS_SERVICE_METADATA | Określa tablicę dokumentów metadanych usługi. |
WS_SERVICE_METADATA_DOCUMENT | Określa poszczególne dokumenty, które składają się na metadane usługi. |