Udostępnij za pośrednictwem


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ś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.