Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Windows hospeda um conjunto de serviços e módulos que juntos constituem um gerenciador de transações. O escalonamento de gerenciamento de transações descreve o processo de migração de uma transação de um dos componentes do gerenciador de transações para outro.
System.Transactions inclui um componente do gerenciador de transações que coordena uma transação que envolve, no máximo, um único recurso durável ou vários recursos voláteis. Como o gerenciador de transações usa apenas chamadas de domínio intra-aplicativo, ele gera o melhor desempenho. Os desenvolvedores não precisam interagir diretamente com o gerenciador de transações. Em vez disso, uma infraestrutura comum que define interfaces, comportamento comum e classes auxiliares é fornecida pelo System.Transactions namespace.
Quando você deseja fornecer a transação a um objeto em outro domínio de aplicativo (incluindo entre limites de processo e de computador) no mesmo computador, a System.Transactions infraestrutura escalona automaticamente a transação para ser gerenciada pelo MSDTC (Coordenador de Transações Distribuídas da Microsoft). O escalonamento também ocorrerá se você adicionar outro gerenciador de recursos duráveis. Quando escalonado, a transação permanecerá gerenciada em seu estado com privilégios elevados até sua conclusão.
Entre os System.Transactions transação e transação MSDTC, existe um tipo de intermediário da transação que é disponibilizado por meio de inscrição de fase única (PSPE) podem ser promovidas. O PSPE é outro mecanismo importante em System.Transactions para otimização de desempenho. Ele permite que um recurso durável remoto, localizado em um domínio de aplicativo, processo ou computador diferente, participe de uma System.Transactions transação sem fazer com que ele seja escalonado para uma transação MSDTC. Para obter mais informações sobre PSPE, consulte Como inscrever recursos como participantes de uma transação.
Como o escalonamento é iniciado
O escalonamento de transações reduz o desempenho porque o MSDTC reside em um processo separado e o escalonamento de uma transação para o MSDTC resulta em mensagens enviadas por todo o processo. Para melhorar o desempenho, você deve atrasar ou evitar o escalonamento para o MSDTC; portanto, você precisa saber como e quando o escalonamento é iniciado.
Como o System.Transactions infra-estrutura trata recursos voláteis e no máximo uma durável de recurso que dá suporte a notificações de fase única, a transação permanece na propriedade do System.Transactions infra-estrutura. O gerenciador de transações se aproveita apenas dos recursos que residem no mesmo domínio do aplicativo e para os quais o registro em log (gravando o resultado da transação em disco) não é necessário. Um escalonamento resulta no System.Transactions infra-estrutura, transferindo a propriedade da transação ao MSDTC acontece quando:
Pelo menos um recurso durável que não dá suporte a notificações de fase única é inscrito na transação.
Pelo menos dois recursos duráveis que dão suporte a notificações de fase única são inscritos na transação. Por exemplo, a inscrição de uma única conexão com o SQL Server 2005 não faz com que uma transação seja promovida. No entanto, sempre que você abrir uma segunda conexão com um banco de dados SQL Server 2005, fazendo com que o banco de dados se inscreva, a infraestrutura do System.Transactions detecta que ele é o segundo recurso durável na transação e escala para uma transação MSDTC.
Uma solicitação para "encaminhar" a transação para um domínio de aplicativo diferente ou um processo diferente é realizada. Por exemplo, a serialização do objeto de transação em um limite de domínio do aplicativo. O objeto de transação é processado por valor, o que significa que qualquer tentativa de passá-lo por um limite de domínio de aplicação (mesmo no mesmo processo) resulta na serialização do objeto de transação. Você pode passar os objetos de transação fazendo uma chamada em um método remoto que usa um Transaction como parâmetro ou pode tentar acessar um componente de serviço transacional à distância. Isso serializa o objeto de transação e resulta em um escalonamento, como quando uma transação é serializada em um domínio de aplicativo. Ele é distribuído e o Gerenciador de transações local não é mais adequado.
A tabela a seguir lista todas as exceções que podem ocorrer durante a escalada.
Tipo de exceção | Condição |
---|---|
InvalidOperationException | Uma tentativa de escalonar uma transação com nível de isolamento igual a Snapshot. |
TransactionAbortedException | O gerenciador de transações está inativo. |
TransactionException | A escalada falha e o aplicativo é abortado. |