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 System.Transactions namespace dá suporte à 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 seja nulo. Se ele não conseguir encontrar um destes, System.Transactions consulte o contexto COM+ de uma transação. Observe que, embora possa System.Transactions encontrar uma transação do contexto COM+, ela ainda favorece transações nativas para System.Transactions.
Níveis de interoperabilidade
A EnterpriseServicesInteropOption enumeração define os seguintes níveis de interoperabilidade—None, Full e Automatic.
A TransactionScope classe fornece construtores que aceitam EnterpriseServicesInteropOption como 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, todas as alterações Current não são refletidas no contexto de COM+. Da mesma forma, as alterações na transação no contexto COM+ não são refletidas em Current. Esse é o modo de operação mais rápido para System.Transactions, pois não há necessidade de sincronização extra. None é o valor padrão usado por TransactionScope com todos os construtores que não aceitam EnterpriseServicesInteropOption como parâmetro.
Se você deseja combinar System.EnterpriseServices transações com sua transação de ambiente, você precisa usar um Full ou Automatic. Ambos os valores dependem de um recurso chamado serviços sem componentes e, portanto, você deve estar em execução no Windows XP Service Pack 2 ou Windows Server 2003 ao usá-los.
Full especifica que as transações de ambiente para System.Transactions e System.EnterpriseServices são sempre as mesmas. Isso resulta na criação de um novo System.EnterpriseServices contexto transacional e aplicando a transação atual para o TransactionScope atual para esse contexto. Dessa forma, a transação em Current está completamente em sincronização 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 for verificado, System.Transactions deverá dar suporte a transações no contexto COM+ se detectar que ele está em execução em um contexto diferente do contexto padrão. 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 do thread usado por System.Transactions é retornada para Current.
Se um novo TransactionScope objeto for criado e a criação ocorrer em um contexto diferente do contexto padrão, a transação atual para o TransactionScope objeto deverá ser refletida em COM+. Nesse caso, Automatic comporta-se da mesma Full forma que cria um novo contexto COM+.
Além disso, quando Current é definido em ambos Full e Automatic, ambos os modos implicam que Current não podem ser definidos diretamente. Qualquer tentativa de definir Current diretamente, exceto ao criar 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 você criar um novo TransactionScope objeto com Full, e depois 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, o valor da EnterpriseServicesInteropOption enumeração passada quando o escopo foi criado inicialmente será verificado.
Se a EnterpriseServicesInteropOption enumeração estiver definida como Automatic, a transação COM+ (System.EnterpriseServices Transação) terá precedência sobre a System.Transactions transação no armazenamento local do thread gerenciado.
Se o valor for definido como None, a System.Transactions transação no armazenamento local do thread gerenciado terá precedência.
Se o valor for Full, haverá apenas uma transação e ela será 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, isso resultará nos seguintes valores de EnterpriseServicesInteropOption:
Full: uma transação associada a um contexto COM+ é criada.
None: uma System.Transactions transação é criada.
Automatic: se houver um contexto COM+, uma transação será criada e anexada ao contexto.
A tabela a seguir ilustra o contexto dos Serviços Empresariais (ES) e um escopo transacional que requer uma transação usando a EnterpriseServicesInteropOption enumeração.
| Contexto do 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 um novo contexto transacional | Criar um novo contexto transacional |
A tabela a seguir ilustra o que é a transação ambiental, dado um contexto específico System.EnterpriseServices e um escopo transacional que requer uma transação usando a enumeração EnterpriseServicesInteropOption.
| Contexto do 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 de ambiente do escopo seja gerenciada por System.Transactionsseparada de qualquer System.EnterpriseServices transação do contexto que pode estar presente.
ES significa que a transação de ambiente do escopo é igual a System.EnterpriseServices transação do contexto.