internal OletxTransaction PSPEPromote(InternalTransaction tx)
{
TransactionState state = tx.State;
base.CommonEnterState(tx);
OletxTransaction oletxTransactionFromTransmitterPropigationToken = null;
try
{
byte[] propagationToken = tx.promoter.Promote();
if (propagationToken == null)
{
throw TransactionException.CreateInvalidOperationException(System.Transactions.SR.GetString("TraceSourceLtm"), System.Transactions.SR.GetString("PromotedReturnedInvalidValue"), null);
}
try
{
oletxTransactionFromTransmitterPropigationToken = TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(propagationToken);
}
catch (ArgumentException exception)
{
throw TransactionException.CreateInvalidOperationException(System.Transactions.SR.GetString("TraceSourceLtm"), System.Transactions.SR.GetString("PromotedReturnedInvalidValue"), exception);
}
if (TransactionManager.FindPromotedTransaction(oletxTransactionFromTransmitterPropigationToken.Identifier) != null)
{
oletxTransactionFromTransmitterPropigationToken.Dispose();
throw TransactionException.CreateInvalidOperationException(System.Transactions.SR.GetString("TraceSourceLtm"), System.Transactions.SR.GetString("PromotedTransactionExists"), null);
}
}
finally
{
state.CommonEnterState(tx);
}
return(oletxTransactionFromTransmitterPropigationToken);
}