Compartir a través de


Metadatos de servicio

El host del servicio WWSAPI admite WS-MetadataExchange para sus puntos de conexión. Habilite este intercambio de metadatos en el host de servicio con los pasos siguientes:

Especificación de documentos de metadatos o nombre del servicio en el host de servicio

El primer paso es especificar los documentos de metadatos en el host de servicio. Para ello, recopile los documentos individuales como una matriz de WS_XML_STRING*. Estas cadenas pueden ser el esquema XML, WSDL o WS-Policy documento. Esto se especifica a través de la propiedad WS_SERVICE_PROPERTY_METADATA .

Opcionalmente, una aplicación también puede especificar el nombre del servicio y el espacio de nombres como parte del WS_SERVICE_METADATA. Si el documento de metadatos no especifica el elemento de servicio para el nombre de servicio especificado, el modelo de servicio generará un elemento de servicio con los puertos WSDL correspondientes para el servicio.

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

Tenga en cuenta que no se realizará ninguna comprobación de los documentos de metadatos individuales en los documentos. Es responsabilidad de la aplicación validar el contenido de los documentos y asegurarse de que todas las rutas de acceso de importación estén relativamente especificadas.

El espacio de nombres especificado se usa para buscar el documento en el que el host de servicio agregará el elemento de servicio.

Adición del elemento de servicio al documento WSDL

El host de servicio proporciona facilidad para que la aplicación agregue un elemento de servicio en su nombre si aún no se ha especificado uno. Para habilitar este comportamiento, una aplicación debe especificar campos serivceName y serviceNs en la estructura WS_SERVICE_METADATA . Si serviceName y serviceNs son NULL , no se agrega ningún elemento de servicio al documento WSDL. Ambos se usan para identificar el documento en el que se va a agregar serviceElement.

Si no se especifica WS_SERVICE_PROPERTY_METADATA propiedad no se especificará ningún voladizo de metadatos en el host del servicio.

Especificar el puerto en el WS_SERVICE_ENDPOINT

Para que un WS_SERVICE_ENDPOINT esté disponible como puerto dentro del elemento de servicio en el documento WSDL, la aplicación debe especificar WS_SERVICE_ENDPOINT_PROPERTY_METADATA propiedad en él.

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

Se supone que la referencia al nombre de enlace y al espacio de nombres existe en los documentos especificados en el host de servicio como parte de WS_SERVICE_PROPERTY_METADATA. El tiempo de ejecución no lo comprueba en nombre de la aplicación.

Habilitación del mantenimiento de WS-MetadataExchange en WS_SERVICE_ENDPOINT

Para atender las solicitudes de WS-MetadataExchange, el host de servicio debe tener al menos un punto de conexión habilitado para atender las solicitudes WS-MetadataExchange. Para ello, establezca la versión adecuada para WS-MetadataExchange en el 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);

Habilitación del mantenimiento HTTP GET en WS_SERVICE_ENDPOINT

Para atender solicitudes GETHTTP, el host de servicio debe tener al menos un punto de conexión habilitado para atender las solicitudes WS-MetadataExchange. Para ello, establezca la versión adecuada para WS-MetadataExchange en el 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);

Especificación del sufijo de dirección URL para solicitudes de Ws-MetadataExchange

Opcionalmente, una aplicación solo puede habilitar la aceptación de solicitudes para WS-MetadataExchange en una ruta de acceso específica. Para ello, se especifica un sufijo para el WS_SERVICE_ENDPOINT especificado. Este sufijo se concatena tal y como está en la dirección URL real del WS_SERVICE_ENDPOINT. La cadena concatenada se usa como la dirección URL coincidente con el encabezado "to" recibido.

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

Los siguientes elementos de API se relacionan con la metada de servicio.

Enumeración Descripción
WS_METADATA_EXCHANGE_TYPE Habilita o deshabilita el mantenimiento de WS-MetadataExchange y HTTP GET en el punto de conexión.

 

Estructura Descripción
WS_SERVICE_ENDPOINT_METADATA Representa el elemento de puerto del punto de conexión.
WS_SERVICE_METADATA Especifica la matriz de documentos de metadatos del servicio.
WS_SERVICE_METADATA_DOCUMENT Especifica los documentos individuales que componen los metadatos del servicio.