Partilhar via


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

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 nativas System.Transactionsdo .

Níveis de interoperabilidade

A EnterpriseServicesInteropOption enumeração define os seguintes níveis de interoperabilidade — FullNonee 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 não Current 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 você quiser combinar System.EnterpriseServices transações com sua transação ambiente, você precisa usar um ou FullAutomatic. 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 em um contexto diferente do contexto padrão, a transação atual para o objeto deverá ser refletida TransactionScope em COM+. Neste caso, Automatic comporta-se como Full na medida em que cria um novo contexto COM+.

Além disso, quando Current é definido em ambos e FullAutomatic, ambos os modos implicam que Current não podem ser definidos diretamente. Qualquer tentativa de definir Current diretamente diferente da criação de um TransactionScope resultado em um InvalidOperationExceptionarquivo . 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 Fullo e, em seguida, criar um segundo TransactionScope objeto, mas não especificar um EnterpriseServicesInteropOption valor, o segundo TransactionScope objeto também terá um Fullarquivo .

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, os seguintes valores de EnterpriseServicesInteropOption resultado 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 Nenhuma Automático Total
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 Nenhuma Automático Total
Contexto padrão ST ST ES
Contexto não padrão ST ES ES

Na tabela anterior: