Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O System.Transactions namespace suporta interoperabilidade entre objetos de transação criados usando esse namespace e transações criadas por meio de COM+.
Você pode usar a EnterpriseServicesInteropOption enumeração ao criar uma nova TransactionScope instância para especificar o nível de interoperabilidade com COM+.
Por padrão, quando o código do aplicativo verifica a propriedade estática Current , System.Transactions tenta procurar uma transação que seja atual ou um TransactionScope objeto que determine que Current é nulo. Se não conseguir encontrar nenhum destes, System.Transactions consulta o contexto COM+ para uma transação. Observe que, embora System.Transactions possa encontrar uma transação do contexto COM+, ela ainda favorece transações que são nativas de System.Transactions.
Níveis de interoperabilidade
A EnterpriseServicesInteropOption enumeração define os seguintes níveis de interoperabilidade — NoneFulle Automatic.
A TransactionScope classe fornece construtores que aceitam EnterpriseServicesInteropOption como um parâmetro.
None, como o nome indica, implica que não há interoperabilidade entre System.EnterpriseServices contextos e escopos de transação. Depois de criar um TransactionScope objeto com None, quaisquer alterações feitas a Current não são refletidas no contexto COM+. Do mesmo modo, as alterações à operação no contexto COM+ não são refletidas no Current. Este é o modo de operação mais rápido porque System.Transactions não há sincronização extra necessária. None é o valor padrão usado por TransactionScope com todos os construtores que não aceitam EnterpriseServicesInteropOption como parâmetro.
Se pretender combinar System.EnterpriseServices transações com a sua transação ambiente, precisa usar um ou outro: Full ou Automatic. Ambos os valores dependem de um recurso chamado serviços sem componentes e, portanto, você deve estar executando no Windows XP Service Pack 2 ou Windows Server 2003 ao usá-los.
Full especifica que as transações ambientais para System.Transactions e System.EnterpriseServices são sempre as mesmas. Isso resulta na criação de um novo System.EnterpriseServices contexto transacional e na aplicação da transação que é atual para que o TransactionScope seja atual para esse contexto. Como tal, a transação em Current está completamente sincronizada com a transação em Transaction. Esse valor introduz uma penalidade de desempenho porque novos contextos COM+ podem precisar ser criados.
Automatic especifica os seguintes requisitos:
Quando Current estiver marcado, System.Transactions deve suportar transações no contexto COM+ se detetar que está a ser executado num contexto diferente do contexto predefinido. Observe que o contexto padrão não pode conter uma transação. Portanto, no contexto padrão, mesmo com Automatic, a transação armazenada no armazenamento local de thread usado por System.Transactions é retornada para Current.
Se um novo TransactionScope objeto for criado e a criação ocorrer num contexto diferente do contexto padrão, a transação que está atual para o objeto TransactionScope deverá ser refletida em COM+. Neste caso, Automatic comporta-se como Full na medida em que cria um novo contexto COM+.
Além disso, quando Current é definido tanto em Full quanto em Automatic, ambos os modos implicam que Current não pode ser definido diretamente. Qualquer tentativa de definir Current diretamente, exceto criando um TransactionScope, resulta em um InvalidOperationException. O EnterpriseServicesInteropOption valor de enumeração é herdado por novos escopos de transação que não especificam explicitamente qual valor usar. Por exemplo, se criar um novo TransactionScope objeto com Full, e, em seguida, criar um segundo TransactionScope objeto, mas não especificar um EnterpriseServicesInteropOption valor, o segundo TransactionScope objeto também terá um Full.
Em resumo, as seguintes regras se aplicam ao criar um novo escopo de transação:
Current é verificado para ver se há uma transação. Esta verificação resulta em:
Uma verificação para ver se há um escopo.
Se houver um escopo, verifica-se o valor da enumeração EnterpriseServicesInteropOption passado quando o escopo foi criado inicialmente.
Se a EnterpriseServicesInteropOption enumeração for definida como Automatic, a transação COM+ (System.EnterpriseServices Transaction) terá precedência sobre a System.Transactions transação no armazenamento local de thread gerenciado.
Se o valor for definido como None, a System.Transactions transação no armazenamento local de thread gerenciado terá precedência.
Se o valor for Full, há apenas uma transação e é uma transação COM+.
O valor da TransactionScopeOption enumeração passada pelo TransactionScope construtor é verificado. Isso determina se uma nova transação deve ser criada.
Se uma nova transação for criada, os seguintes valores de EnterpriseServicesInteropOption resultam em:
Full: é criada uma transação associada a um contexto COM+.
None: uma System.Transactions transação é criada.
Automatic: se houver um contexto COM+, uma transação é criada e anexada ao contexto.
A tabela a seguir ilustra o contexto do Enterprise Services (ES) e um escopo transacional que requer uma transação usando a EnterpriseServicesInteropOption enumeração.
| Contexto ES | Nenhum | Automático | Completo |
|---|---|---|---|
| Contexto padrão | Contexto padrão | Contexto padrão | Criar novo contexto transacional |
| Contexto não padrão | Manter o contexto do cliente | Criar novo contexto transacional | Criar novo contexto transacional |
A tabela a seguir ilustra o que é a transação ambiente, dado um contexto específico System.EnterpriseServices e um escopo transacional que requer uma transação usando a EnterpriseServicesInteropOption enumeração.
| Contexto ES | Nenhum | Automático | Completo |
|---|---|---|---|
| Contexto padrão | ST | ST | ES |
| Contexto não padrão | ST | ES | ES |
Na tabela anterior:
ST significa que a transação ambiente do escopo é gerenciada por System.Transactions, de forma separada de qualquer transação de contexto de System.EnterpriseServices que possa estar presente.
ES significa que a transação ambiente do escopo é a mesma que a System.EnterpriseServices transação do contexto.