Importação de metadados
O WWSAPI inclui elementos de API que podem ser usados para processar WSDL e Policy de um endpoint com o objetivo de extrair informações que podem ser usadas para se comunicar com o endpoint. Essas APIs geralmente são usadas quando o protocolo de comunicação suportado pelo 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 asserções WSDL e WS-Policy correspondem à API, consulte o tópico Metadata Mapping.
Segurança
Os metadados baixados são tão bons quanto o endereço usado para baixá-los. Um aplicativo deve garantir que confia no endereço. Além disso, um aplicativo deve garantir que usa um protocolo de segurança para baixar os documentos de metadados que não permite a adulteração dos metadados.
Um aplicativo deve inspecionar os endereços dos serviços expostos pelos metadados. Por padrão, o tempo de execução garante que o nome do host do serviço corresponda ao da URL original usada para baixar os metadados, mas o aplicativo pode querer 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 de nome de 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 uma parte diferente na qual ele não confia de alguma outra forma.
Por padrão, a quantidade máxima de memória usada pelo tempo de execução de metadados para desserializar e processar os metadados é 256k 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, 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, confiar em 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 enumerações a seguir 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 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