Compartilhar via


Interoperabilidade com serviços empresariais e transações COM+

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:

  1. Current é verificado para ver se há uma transação. Esta verificação resulta em:

  2. O valor da TransactionScopeOption enumeração passada pelo TransactionScope construtor é verificado. Isso determina se uma nova transação deve ser criada.

  3. 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: