Importación de metadatos
WWSAPI incluye elementos de API que se pueden usar para procesar WSDL y Policy desde un punto de conexión con el objetivo de extraer información que se puede usar para comunicarse con el punto de conexión. Estas API se suelen usar cuando el protocolo de comunicación admitido por el punto de conexión aún no se conoce.
Use la secuencia siguiente para procesar los metadatos:
WsCreateMetadata // create a metadata object
while there are metadata documents to add
{
// retrieve the metadata document from it's location
// (download, read from file, etc)
// add the document to the metadata object
WsReadMetadata
// optionally query the metadata object for any missing documents
WsGetMissingMetadataDocumentAddress?
}
// get the endpoints from the metadata object
WsGetMetadataEndpoints
for each endpoint
{
// examine the endpoint information to see if
// the endpoint is relevant for the particular scenario
if the endpoint is relevant
{
// get the policy object from the endpoint
// get the number of policy alternatives in the policy
WsGetPolicyAlternativeCount
for each policy alternative
{
// construct a policy constraints structure that specifies
// what policy is acceptable and what information to extract
// from the policy
// see if the policy alternative matches the constraints
WsMatchPolicyAlternative
// if there is a match, then use it
// if there is not a match, then it is also possible to
// try with a different constraint structure
}
}
}
// If reusing the metadata object for a different set of documents
WsResetMetadata? // reset metadata object, which removes all documents
WsFreeMetadata // free the metadata object
para obtener información sobre cómo WSDL y WS-Policy aserciones corresponden a la API, consulte el tema Asignación de metadatos .
Seguridad
Los metadatos descargados solo son tan buenos como la dirección usada para descargarlos. Una aplicación debe asegurarse de que confía en la dirección. Además, una aplicación debe asegurarse de que usa un protocolo de seguridad para descargar los documentos de metadatos que no permiten la manipulación de los metadatos.
Una aplicación debe inspeccionar las direcciones de los servicios expuestos por los metadatos. De forma predeterminada, el runtime garantiza que el nombre de host del servicio coincida con el de la dirección URL original usada para descargar los metadatos, pero es posible que la aplicación quiera realizar comprobaciones adicionales. Una aplicación puede deshabilitar la comprobación del nombre de host sobrescribiendo WS_METADATA_PROPERTY_VERIFY_HOST_NAMES propiedad. Si la comprobación de nombre de host que se realiza de forma predeterminada está deshabilitada, la aplicación tendrá que protegerse contra los documentos de metadatos que contienen la dirección de un servicio de otra parte que no confía de alguna otra manera.
De forma predeterminada, la cantidad máxima de memoria usada por el tiempo de ejecución de metadatos para deserializar y procesar los metadatos es de 256 000, y el número máximo de documentos que se pueden agregar es 32. Estos valores predeterminados se pueden sobrescribir mediante WS_METADATA_PROPERTY_HEAP_REQUESTED_SIZE y WS_METADATA_PROPERTY_MAX_DOCUMENTS propiedades. Estos límites están diseñados para limitar la cantidad de descargas y limitar la cantidad de memoria asignada para acumular los metadatos. Aumentar estos valores puede provocar un uso excesivo de memoria, uso de CPU o consumo de ancho de banda de red. Tenga en cuenta que debido a la expansión de cadenas de diccionario en formato binario, un mensaje pequeño puede provocar un formulario deserializado mucho mayor, por lo que confiar en mensajes pequeños para limitar la asignación de memoria de metadatos no es suficiente cuando se usa el formato binario.
De forma predeterminada, el número máximo de alternativas de directiva es 32, aunque se puede sobrescribir mediante WS_POLICY_PROPERTY_MAX_ALTERNATIVES propiedad. Si una aplicación recorre en bucle cada alternativa que busca una coincidencia, es posible que tenga que buscar todas las alternativas antes de encontrar una coincidencia. Aumentar el número máximo de alternativas puede provocar un uso excesivo de la CPU.
Las enumeraciones siguientes forman parte de la importación de metadatos:
- WS_METADATA_PROPERTY_ID
- WS_METADATA_STATE
- WS_POLICY_EXTENSION_TYPE
- WS_POLICY_PROPERTY_ID
- WS_POLICY_STATE
- WS_SECURITY_BINDING_CONSTRAINT_TYPE
Las siguientes funciones forman parte de la importación de metadatos:
- WsCreateMetadata
- WsFreeMetadata
- WsGetMetadataEndpoints
- WsGetMetadataProperty
- WsGetMissingMetadataDocumentAddress
- WsGetPolicyAlternativeCount
- WsGetPolicyProperty
- WsMatchPolicyAlternative
- WsReadMetadata
- WsResetMetadata
Los siguientes identificadores forman parte de la importación de metadatos:
Las estructuras siguientes forman parte de la importación de metadatos:
- WS_CERT_MESSAGE_SECURITY_BINDING_CONSTRAINT
- WS_CHANNEL_PROPERTY_CONSTRAINT
- WS_ENDPOINT_POLICY_EXTENSION
- WS_HTTP_HEADER_AUTH_SECURITY_BINDING_CONSTRAINT
- WS_ISSUED_TOKEN_MESSAGE_SECURITY_BINDING_CONSTRAINT
- WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_CONSTRAINT
- WS_METADATA_ENDPOINT
- WS_METADATA_ENDPOINTS
- WS_METADATA_PROPERTY
- WS_POLICY_CONSTRAINTS
- WS_POLICY_EXTENSION
- WS_POLICY_PROPERTIES
- WS_POLICY_PROPERTY
- WS_REQUEST_SECURITY_TOKEN_PROPERTY_CONSTRAINT
- WS_SECURITY_BINDING_CONSTRAINT
- WS_SECURITY_BINDING_PROPERTY_CONSTRAINT
- WS_SECURITY_CONSTRAINTS
- WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_CONSTRAINT
- WS_SECURITY_PROPERTY_CONSTRAINT
- WS_SSL_TRANSPORT_SECURITY_BINDING_CONSTRAINT
- WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_CONSTRAINT
- WS_USERNAME_MESSAGE_SECURITY_BINDING_CONSTRAINT