Delen via


Servicemetagegevens

De WWSAPI-servicehost ondersteunt WS-MetadataExchange voor de eindpunten. U schakelt dergelijke metagegevensuitwisseling in op de servicehost met de volgende stappen:

Metagegevensdocumenten/servicenaam opgeven op de servicehost

De eerste stap is het opgeven van de metagegevensdocumenten op de servicehost. Doe dit door de afzonderlijke documenten te verzamelen als een matrix van WS_XML_STRING*'s. Deze tekenreeksen kunnen XML-schema, WSDL of WS-Policy document zijn. Dit wordt opgegeven via de eigenschap WS_SERVICE_PROPERTY_METADATA.

Een toepassing kan desgewenst ook de servicenaam en naamruimte opgeven als onderdeel van de WS_SERVICE_METADATA. Als het metagegevensdocument het service-element voor de opgegeven servicenaam niet opgeeft, genereert het servicemodel een service-element met de bijbehorende WSDL-poorten voor de service.

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

Houd er rekening mee dat er geen verificatie van de afzonderlijke metagegevensdocumenten wordt uitgevoerd op de documenten. Het is de verantwoordelijkheid van de toepassing om de inhoud van de documenten te valideren en ervoor te zorgen dat alle importpaden relatief zijn opgegeven.

De opgegeven naamruimte wordt gebruikt om het document te zoeken waarin het service-element wordt toegevoegd door de servicehost.

Toevoeging van service-element aan het WSDL-document

De servicehost biedt een voorziening voor de toepassing om namens de toepassing een service-element toe te voegen als er nog geen service-element is opgegeven. Als u dit gedrag wilt inschakelen, moet een toepassing serivceName- en serviceN-velden opgeven in de WS_SERVICE_METADATA-structuur. Als serviceName en serviceN's beide NULL- wordt er geen service-element toegevoegd aan het WSDL-document. Beide worden gebruikt om het document te identificeren waarin het serviceElement wordt toegevoegd.

Als WS_SERVICE_PROPERTY_METADATA eigenschap niet is opgegeven, vindt er geen exhange van metagegevens plaats op de servicehost.

De poort op de WS_SERVICE_ENDPOINT opgeven

Als u een WS_SERVICE_ENDPOINT beschikbaar wilt maken als een poort binnen het service-element in het WSDL-document, moet de toepassing WS_SERVICE_ENDPOINT_PROPERTY_METADATA eigenschap opgeven.

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

Er wordt vanuit gegaan dat de verwijzing naar de bindingsnaam en naamruimte bestaat in de documenten die zijn opgegeven op de servicehost als onderdeel van WS_SERVICE_PROPERTY_METADATA. De runtime controleert dit niet namens de toepassing.

WS-MetadataExchange onderhoud inschakelen op WS_SERVICE_ENDPOINT

Om WS-MetadataExchange aanvragen te kunnen verwerken, moet de servicehost ten minste één eindpunt hebben ingeschakeld voor onderhoud WS-MetadataExchange aanvragen. Dit wordt gedaan door de juiste versie in te stellen voor WS-MetadataExchange op de 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);

HTTP GET-onderhoud inschakelen op WS_SERVICE_ENDPOINT

Om SERVICEHTTP GET-aanvragen te kunnen uitvoeren, moet voor de servicehost ten minste één eindpunt zijn ingeschakeld voor onderhoud WS-MetadataExchange aanvragen. Dit wordt gedaan door de juiste versie in te stellen voor WS-MetadataExchange op de 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);

URL-achtervoegsel opgeven voor Ws-MetadataExchange aanvragen

Een toepassing kan desgewenst alleen accepteren van aanvragen voor WS-MetadataExchange op een specifiek pad inschakelen. Dit wordt gedaan door een achtervoegsel op te geven voor de opgegeven WS_SERVICE_ENDPOINT. Dit achtervoegsel wordt samengevoegd as-is naar de werkelijke URL voor de WS_SERVICE_ENDPOINT. De samengevoegde tekenreeks wordt gebruikt als de overeenkomende URL voor de 'to'-header die is ontvangen.

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

De volgende API-elementen hebben betrekking op servicemetada.

Opsomming Beschrijving
WS_METADATA_EXCHANGE_TYPE Hiermee schakelt u WS-MetadataExchange- en HTTP GET-onderhoud op het eindpunt in of uit.

 

Structuur Beschrijving
WS_SERVICE_ENDPOINT_METADATA Vertegenwoordigt het poortelement voor het eindpunt.
WS_SERVICE_METADATA Hiermee geeft u de matrix met metagegevensdocumenten van de service op.
WS_SERVICE_METADATA_DOCUMENT Hiermee geeft u de afzonderlijke documenten op waaruit de metagegevens van de service bestaan.