Dela via


Tjänstmetadata

WWSAPI-tjänstvärden stöder WS-MetadataExchange för dess slutpunkter. Du aktiverar sådant metadatautbyte på tjänstvärden med följande steg:

Ange metadatadokument/tjänstnamn på tjänstvärden

Det första steget är att ange metadatadokumenten på tjänstvärden. Gör detta genom att samla in enskilda dokument som en matris med WS_XML_STRING*'s. Dessa strängar kan vara XML-schema, WSDL eller WS-Policy dokument. Detta anges via egenskapen WS_SERVICE_PROPERTY_METADATA.

Ett program kan också ange tjänstnamnet och namnområdet som en del av WS_SERVICE_METADATA. Om metadatadokumentet inte anger tjänstelementet för det angivna tjänstnamnet genererar tjänstmodellen ett tjänstelement med motsvarande WSDL-portar för tjänsten.

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);

Observera att ingen verifiering av de enskilda metadatadokumenten kommer att utföras på dokumenten. Det är programmets ansvar att verifiera innehållet i dokumenten och se till att alla importsökvägar är relativt angivna.

Det angivna namnområdet används för att hitta dokumentet där tjänstelementet ska läggas till av tjänstvärden.

Tillägg av tjänstelement till WSDL-dokumentet

Tjänstvärden tillhandahåller en möjlighet för programmet att lägga till ett tjänstelement för dess räkning om ett inte redan har angetts. För att aktivera det här beteendet måste ett program ange fälten serivceName och serviceNs i den WS_SERVICE_METADATA strukturen. Om både serviceName och serviceN är NULL läggs inget tjänstelement till i WSDL-dokumentet. Båda dessa används för att identifiera dokument där serviceElement ska läggas till.

Om WS_SERVICE_PROPERTY_METADATA egenskap inte anges sker inga metadataexhang på tjänstvärden.

Ange porten på WS_SERVICE_ENDPOINT

För att en WS_SERVICE_ENDPOINT ska vara tillgänglig som en port i tjänstelementet i WSDL-dokumentet måste programmet ange WS_SERVICE_ENDPOINT_PROPERTY_METADATA egenskap på den.

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);

Det antas att referensen till bindningsnamnet och namnområdet finns i de dokument som anges på tjänstvärden som en del av WS_SERVICE_PROPERTY_METADATA. Körningen verifierar inte detta för programmets räkning.

Aktivera WS-MetadataExchange service på WS_SERVICE_ENDPOINT

För att kunna hantera WS-MetadataExchange begäranden måste tjänstvärden ha minst en slutpunkt aktiverad för service WS-MetadataExchange begäranden. Detta görs genom att ange lämplig version för WS-MetadataExchange på 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);

Aktivera HTTP GET-service på WS_SERVICE_ENDPOINT

För att kunna hanteraHTTP GET-begäranden måste tjänstvärden ha minst en slutpunkt aktiverad för service WS-MetadataExchange begäranden. Detta görs genom att ange lämplig version för WS-MetadataExchange på 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);

Ange URL-suffix för Ws-MetadataExchange begäranden

Ett program kan också aktivera att endast acceptera begäranden för WS-MetadataExchange på en specifik sökväg. Detta görs genom att ange ett suffix för den angivna WS_SERVICE_ENDPOINT. Det här suffixet sammanfogas as-is till den faktiska URL:en för WS_SERVICE_ENDPOINT. Den sammanfogade strängen används som matchande URL till "till"-huvudet som tagits emot.

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);

Följande API-element relaterar till tjänstmetada.

Uppräkning Beskrivning
WS_METADATA_EXCHANGE_TYPE Aktiverar eller inaktiverar WS-MetadataExchange och HTTP GET-service på slutpunkten.

 

Struktur Beskrivning
WS_SERVICE_ENDPOINT_METADATA Representerar portelementet för slutpunkten.
WS_SERVICE_METADATA Anger matrisen för tjänstmetadatadokument.
WS_SERVICE_METADATA_DOCUMENT Anger de enskilda dokument som utgör tjänstens metadata.