Importação de metadados
O WWSAPI inclui elementos de API que podem ser usados para processar wsdl e política de um ponto de extremidade com o objetivo de extrair informações que podem ser usadas para se comunicar com o ponto de extremidade. Essas APIs normalmente são usadas quando o protocolo de comunicação compatível com o ponto de extremidade ainda não é conhecido.
Use a seguinte sequência para processar metadados:
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 obter informações sobre como as declarações WSDL e WS-Policy correspondem à API, consulte o tópico mapeamento de metadados do.
Segurança
Os metadados baixados são tão bons quanto o endereço usado para baixá-lo. Um aplicativo deve garantir que ele confie no endereço. Além disso, um aplicativo deve garantir que ele use um protocolo de segurança para baixar os documentos de metadados que não permitem a adulteração dos metadados.
Um aplicativo deve inspecionar os endereços dos serviços expostos pelos metadados. Por padrão, o runtime garante que o nome do host do serviço corresponda ao da URL original usada para baixar os metadados, mas talvez o aplicativo queira executar verificações adicionais. Um aplicativo pode desabilitar a verificação do nome do host substituindo WS_METADATA_PROPERTY_VERIFY_HOST_NAMES propriedade. Se a verificação do nome do host feita por padrão estiver desabilitada, o aplicativo precisará se proteger contra os documentos de metadados que contêm o endereço de um serviço de outra parte em que ele não confia de alguma outra forma.
Por padrão, a quantidade máxima de memória usada pelo runtime de metadados para desserializar e processar os metadados é de 256 mil, e o número máximo de documentos que podem ser adicionados é 32. Esses valores padrão podem ser substituídos por propriedades WS_METADATA_PROPERTY_HEAP_REQUESTED_SIZE e WS_METADATA_PROPERTY_MAX_DOCUMENTS. Esses limites são projetados para limitar a quantidade de downloads e limitar a quantidade de memória alocada para acumular os metadados. Aumentar esses valores pode levar a uso excessivo de memória, uso de CPU ou consumo de largura de banda de rede. Observe que, devido à expansão de cadeias de caracteres de dicionário no formato binário, uma mensagem pequena pode levar a um formulário desserializado muito maior, portanto, depender de mensagens pequenas para limitar a alocação de memória de metadados não é suficiente ao usar o formato binário.
Por padrão, o número máximo de alternativas de política é 32, embora possa ser substituído por WS_POLICY_PROPERTY_MAX_ALTERNATIVES propriedade. Se um aplicativo percorrer cada alternativa procurando uma correspondência, talvez seja necessário pesquisar todas as alternativas antes de encontrar uma correspondência. Aumentar o número máximo de alternativas pode levar à utilização excessiva da CPU.
As seguintes enumerações fazem parte da importação de metadados:
- WS_METADATA_PROPERTY_ID
- WS_METADATA_STATE
- WS_POLICY_EXTENSION_TYPE
- WS_POLICY_PROPERTY_ID
- WS_POLICY_STATE
- WS_SECURITY_BINDING_CONSTRAINT_TYPE
As seguintes funções fazem parte da importação de metadados:
- WsCreateMetadata
- WsFreeMetadata
- WsGetMetadataEndpoints
- WsGetMetadataProperty
- WsGetMissingMetadataDocumentAddress
- WsGetPolicyAlternativeCount
- WsGetPolicyProperty
- WsMatchPolicyAlternative
- WsReadMetadata
- WsResetMetadata
Os identificadores a seguir fazem parte da importação de metadados:
As estruturas a seguir fazem parte da importação de metadados:
- 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