Importação de metadados
A WWSAPI inclui elementos de API que podem ser usados para processar o WSDL e a 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. Normalmente, essas APIs 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 .
Segurança
Os metadados baixados são tão bons quanto o endereço usado para baixá-lo. Um aplicativo deve garantir que seja confiável 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 violaçã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 o nome do host marcar que é feito por padrão estiver desabilitado, 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 maneira.
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 ao uso excessivo de memória, ao uso da CPU ou ao 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 formato 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. O aumento do 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 seguintes identificadores fazem parte da importação de metadados:
As seguintes estruturas 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