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 i egenskapen WS_SERVICE_METADATA på WS_SERVICE_HOST.
- Ange tjänstnamnet i egenskapen WS_SERVICE_METADATA på WS_SERVICE_HOST.
- Ange porten för enskilda slutpunkter med hjälp av egenskapen WS_SERVICE_ENDPOINT_PROPERTY_METADATA på WS_SERVICE_ENDPOINT.
- Aktivera en eller flera WS_SERVICE_ENDPOINT strukturer för att betjäna WS-MetadataExchange begäranden.
- Du kan också ange WS_SERVICE_ENDPOINT_PROPERTY_METADATA_EXCHANGE_URL_SUFFIX i WS_SERVICE_ENDPOINT_PROPERTY_ID uppräkning för service Ws-MetadataExchange begäranden på en specifik adress.
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. |