Freigeben über


Dienstmetadaten

Der WWSAPI-Diensthost unterstützt WS-MetadataExchange für seine Endpunkte. Sie aktivieren diesen Metadatenaustausch auf dem Diensthost mit den folgenden Schritten:

Angeben von Metadatendokumenten/Dienstnamen auf dem Diensthost

Der erste Schritt besteht darin, die Metadatendokumente auf dem Diensthost anzugeben. Dazu sammeln Sie die einzelnen Dokumente als Array von WS_XML_STRING*s. Diese Zeichenfolgen können XML-Schema, WSDL oder WS-Policy Dokument sein. Dies wird durch die eigenschaft WS_SERVICE_PROPERTY_METADATA angegeben.

Optional kann eine Anwendung auch den Dienstnamen und den Namespace als Teil der WS_SERVICE_METADATA angeben. Wenn das Metadatendokument das Dienstelement für den angegebenen Dienstnamen nicht angibt, generiert das Dienstmodell ein Dienstelement mit den entsprechenden WSDL-Ports für den Dienst.

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

Beachten Sie, dass keine Überprüfung der einzelnen Metadatendokumente für die Dokumente durchgeführt wird. Es liegt in der Verantwortung der Anwendung, den Inhalt der Dokumente zu überprüfen und sicherzustellen, dass alle Importpfade relativ angegeben sind.

Der angegebene Namespace wird verwendet, um das Dokument zu suchen, in dem das Dienstelement vom Diensthost hinzugefügt wird.

Hinzufügen eines Dienstelements zum WSDL-Dokument

Der Diensthost bietet der Anwendung die Möglichkeit, in ihrem Namen ein Dienstelement hinzuzufügen, wenn es noch nicht angegeben ist. Um dieses Verhalten zu aktivieren, muss eine Anwendung die Felder serivceName und serviceNs in der WS_SERVICE_METADATA Struktur angeben. Wenn serviceName und serviceNs null sind, wird dem WSDL-Dokument kein Dienstelement hinzugefügt. Beide werden verwendet, um ein Dokument zu identifizieren, in dem das serviceElement hinzugefügt werden soll.

Wenn WS_SERVICE_PROPERTY_METADATA Eigenschaft nicht angegeben ist, erfolgt kein Metadatenexhange auf dem Diensthost.

Angeben des Ports auf dem WS_SERVICE_ENDPOINT

Damit ein WS_SERVICE_ENDPOINT als Port innerhalb des Dienstelements im WSDL-Dokument verfügbar ist, muss die Anwendung WS_SERVICE_ENDPOINT_PROPERTY_METADATA -Eigenschaft angeben.

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

Es wird davon ausgegangen, dass der Verweis auf den Bindungsnamen und -namespace in den Dokumenten vorhanden ist, die auf dem Diensthost als Teil von WS_SERVICE_PROPERTY_METADATA angegeben sind. Die Runtime überprüft dies nicht im Auftrag der Anwendung.

Aktivieren WS-MetadataExchange Wartung auf WS_SERVICE_ENDPOINT

Um WS-MetadataExchange Anforderungen zu warten, muss der Diensthost mindestens einen Endpunkt für die Wartung WS-MetadataExchange Anforderungen aktiviert haben. Hierzu legen Sie die entsprechende Version für WS-MetadataExchange auf dem WS_SERVICE_ENDPOINT fest.

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

Aktivieren der HTTP GET-Wartung auf WS_SERVICE_ENDPOINT

DamitHTTP GET-Anforderungen bereitgestellt werden können, muss für den Diensthost mindestens ein Endpunkt für die Wartung WS-MetadataExchange Anforderungen aktiviert sein. Hierzu legen Sie die entsprechende Version für WS-MetadataExchange auf dem WS_SERVICE_ENDPOINT fest.

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

Angeben des URL-Suffixs für Ws-MetadataExchange Anforderungen

Eine Anwendung kann optional nur das Akzeptieren von Anforderungen für WS-MetadataExchange für einen bestimmten Pfad aktivieren. Hierzu wird ein Suffix für die angegebene WS_SERVICE_ENDPOINT angegeben. Dieses Suffix wird unverändert mit der tatsächlichen URL für die WS_SERVICE_ENDPOINT verkettet. Die verkettete Zeichenfolge wird als übereinstimmende URL zum empfangenen "to"-Header verwendet.

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

Die folgenden API-Elemente beziehen sich auf dienstmetada.

Enumeration Beschreibung
WS_METADATA_EXCHANGE_TYPE Aktiviert oder deaktiviert WS-MetadataExchange- und HTTP GET-Wartung auf dem Endpunkt.

 

Struktur Beschreibung
WS_SERVICE_ENDPOINT_METADATA Stellt das Portelement für den Endpunkt dar.
WS_SERVICE_METADATA Gibt das Array der Dienstmetadatendokumente an.
WS_SERVICE_METADATA_DOCUMENT Gibt die einzelnen Dokumente an, aus denen die Dienstmetadaten bestehen.