Método ICrmLogControl::RegisterCompensator (comsvcs.h)
O CRM Worker usa esse método para registrar o CRM Compensator com a infraestrutura crm. Ele deve ser o primeiro método chamado pelo CRM Worker e pode ser chamado com êxito apenas uma vez. Se o CRM Worker receber um código de erro de "recuperação em andamento" ao chamar esse método, ele deverá chamar esse método novamente até que ele receba êxito.
Sintaxe
HRESULT RegisterCompensator(
[in] LPCWSTR lpcwstrProgIdCompensator,
[in] LPCWSTR lpcwstrDescription,
[in] LONG lCrmRegFlags
);
Parâmetros
[in] lpcwstrProgIdCompensator
O ProgId do compensador crm. O CLSID do CrM Compensator no formulário de cadeia de caracteres também é aceito.
[in] lpcwstrDescription
A cadeia de caracteres de descrição a ser usada pelas interfaces de monitoramento.
[in] lCrmRegFlags
Sinalizadores da enumeração CRMREGFLAGS que controlam quais fases de conclusão de transação devem ser recebidas pelo Compensador de CRM e se a recuperação deve falhar se as transações em dúvida permanecerem após a tentativa de recuperação.
Retornar valor
Esse método pode retornar os valores a seguir.
Código de retorno | Descrição |
---|---|
|
O método foi concluído com sucesso. |
|
Um ponteiro NULL foi fornecido como um argumento. |
|
Ocorreu um erro inesperado. |
|
O componente que cria o funcionário do CRM não tem uma transação. |
|
A recuperação do arquivo de log crm ainda está em andamento. |
|
Falha na recuperação do arquivo de log crm porque as transações em dúvida permanecem. |
|
Esse método foi chamado no estado errado; antes de RegisterCompensator ou quando a transação está sendo concluída (CRM Worker). |
|
Ocorreu um erro de memória insuficiente. |
|
O CrM Compensator não dá suporte a pelo menos uma das interfaces necessárias (ICrmCompensator ou ICrmCompensatorVariants). |
Comentários
O parâmetro lCrmRegFlags permite que o implementador decida quais fases de conclusão de transação o Compensador do CRM deseja receber. Alguns compensadores de CRM podem não executar nenhum trabalho na fase de preparação e, portanto, não precisam receber notificações de preparação; ele pode melhorar o desempenho para especificar que nenhuma fase de preparação é necessária nesse caso.
É recomendável que os Operadores de CRM e os Compensadores de CRM sejam desenvolvidos como componentes encadeados "Ambos" (Modelo de Threading = Qualquer Apartamento). No entanto, em alguns casos, isso pode não ser possível devido a restrições de linguagem (por exemplo, ao desenvolver CRMs com o Visual Basic). Os compensadores de CRM com thread de apartment (Modelo de Threading = Apartamento de Thread Único) ficarão em deadlock na fase de preparação, a menos que sua propriedade de sincronização seja definida como "sem suporte". Outra alternativa para compensadores de CRM com thread de apartamento é ignorar a fase de preparação se não for necessário.
Em cenários com vários DTCs (Coordenadores de Transações Distribuídas), é possível que uma transação DTC possa entrar no estado em dúvida. Normalmente, isso ocorre porque ocorreu uma interrupção durante uma transação e o originador da transação não pode ser contatado para descobrir o resultado da transação. Nesse caso, a infraestrutura do CRM não pode determinar o resultado da transação. Um implementador crm pode decidir se novas transações devem ser permitidas nesse caso.
O sinalizador "fail if in-doubt remain" é usado da seguinte maneira: ao especificar o sinalizador "fail if in-doubt remain" no RegisterCompensator, se as transações em dúvida permanecerem após a recuperação, a chamada para RegisterCompensator falhará com um código de erro "falha na recuperação". Se o sinalizador "falhar se as dúvidas permanecerem" não for especificado, a recuperação será bem-sucedida, novas transações serão permitidas e as transações em dúvida permanecerão no arquivo de log crm. A infraestrutura do CRM tenta resolve essas transações em dúvida novamente na próxima recuperação (quando o processo do servidor de aplicativos é reiniciado).
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 Professional [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows 2000 Server [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | comsvcs.h |