Прочитать на английском

Поделиться через


Transaction.EnlistVolatile Метод

Определение

Присоединяет диспетчер переменных ресурсов к участию в транзакции.

Перегрузки

EnlistVolatile(IEnlistmentNotification, EnlistmentOptions)

Включает диспетчер быстро изменяющихся ресурсов с поддержкой двухфазной фиксации для участия в транзакции.

EnlistVolatile(ISinglePhaseNotification, EnlistmentOptions)

Присоединяет диспетчер переменных ресурсов, поддерживающий однофазную оптимизацию фиксации, для участия в транзакции.

Комментарии

Диспетчеры переменных ресурсов не могут восстановиться после сбоя завершения транзакции, в которой они участвовали. Дополнительные сведения о переменных и устойчивых ресурсах, а также о том, как заручиться ресурсом, см. в разделе "Реализация Resource Manager". Дополнительные сведения о том, как диспетчер ресурсов реагирует на уведомление о фиксации и подготовке фиксации, см. в разделе "Фиксация транзакции в Single-Phase и многофазном режиме".

EnlistVolatile(IEnlistmentNotification, EnlistmentOptions)

Включает диспетчер быстро изменяющихся ресурсов с поддержкой двухфазной фиксации для участия в транзакции.

public System.Transactions.Enlistment EnlistVolatile (System.Transactions.IEnlistmentNotification enlistmentNotification, System.Transactions.EnlistmentOptions enlistmentOptions);
public System.Transactions.Enlistment EnlistVolatile (System.Transactions.IEnlistmentNotification notification, System.Transactions.EnlistmentOptions options);

Параметры

enlistmentNotificationnotification
IEnlistmentNotification

Объект, который реализует интерфейс IEnlistmentNotification для получения уведомлений о двухфазной фиксации.

enlistmentOptionsoptions
EnlistmentOptions

EnlistDuringPrepareRequired, если диспетчер ресурсов будет выполнять дополнительные действия на этапе подготовки.

Возвращаемое значение

Enlistment

Объект Enlistment, который описывает перечисление.

Примеры

В следующем примере показана реализация IEnlistmentNotification интерфейса, а также добавление объекта в качестве участника транзакции с помощью EnlistVolatile метода.

static void Main(string[] args)
{
    try
    {
        using (TransactionScope scope = new TransactionScope())
        {
        
            //Create an enlistment object
            myEnlistmentClass myElistment = new myEnlistmentClass();

            //Enlist on the current transaction with the enlistment object
            Transaction.Current.EnlistVolatile(myElistment, EnlistmentOptions.None);

            //Perform transactional work here.

            //Call complete on the TransactionScope based on console input
                            ConsoleKeyInfo c;
            while(true)
                            {
                Console.Write("Complete the transaction scope? [Y|N] ");
                c = Console.ReadKey();
                Console.WriteLine();
        
                                    if ((c.KeyChar == 'Y') || (c.KeyChar == 'y'))
                {
                    scope.Complete();
                    break;
                }
                else if ((c.KeyChar == 'N') || (c.KeyChar == 'n'))
                {
                    break;
                }
            }
        }
    }
    catch (System.Transactions.TransactionException ex)
    {
        Console.WriteLine(ex);
    }
    catch
    {
        Console.WriteLine("Cannot complete transaction");
        throw;
    }
}

class myEnlistmentClass : IEnlistmentNotification
{
    public void Prepare(PreparingEnlistment preparingEnlistment)
    {
        Console.WriteLine("Prepare notification received");

        //Perform transactional work

        //If work finished correctly, reply prepared
        preparingEnlistment.Prepared();

        // otherwise, do a ForceRollback
        preparingEnlistment.ForceRollback();
    }

    public void Commit(Enlistment enlistment)
    {
        Console.WriteLine("Commit notification received");

        //Do any work necessary when commit notification is received

        //Declare done on the enlistment
        enlistment.Done();
    }

    public void Rollback(Enlistment enlistment)
    {
        Console.WriteLine("Rollback notification received");

        //Do any work necessary when rollback notification is received

        //Declare done on the enlistment
        enlistment.Done();
    }

    public void InDoubt(Enlistment enlistment)
    {
        Console.WriteLine("In doubt notification received");

        //Do any work necessary when indout notification is received
        
        //Declare done on the enlistment
        enlistment.Done();
    }
}

Комментарии

Диспетчеры переменных ресурсов не могут восстановиться после сбоя завершения транзакции, в которой они участвовали. Чтобы получить устойчивый зачисление в транзакцию, используйте EnlistDurable метод.

Диспетчеры ресурсов, зачисленные для участия в транзакции с помощью этого метода, получают два уведомления о фиксации этапа, соответствующие методам, определенным в интерфейсе IEnlistmentNotification .

Применяется к

EnlistVolatile(ISinglePhaseNotification, EnlistmentOptions)

Присоединяет диспетчер переменных ресурсов, поддерживающий однофазную оптимизацию фиксации, для участия в транзакции.

public System.Transactions.Enlistment EnlistVolatile (System.Transactions.ISinglePhaseNotification singlePhaseNotification, System.Transactions.EnlistmentOptions enlistmentOptions);
public System.Transactions.Enlistment EnlistVolatile (System.Transactions.ISinglePhaseNotification notification, System.Transactions.EnlistmentOptions options);

Параметры

singlePhaseNotificationnotification
ISinglePhaseNotification

Объект, реализующий интерфейс ISinglePhaseNotification, который должен быть способен получать уведомления об однофазной и двухфазной фиксации.

enlistmentOptionsoptions
EnlistmentOptions

EnlistDuringPrepareRequired, если диспетчер ресурсов будет выполнять дополнительные действия на этапе подготовки.

Возвращаемое значение

Enlistment

Объект Enlistment, который описывает перечисление.

Комментарии

Диспетчеры переменных ресурсов не могут восстановиться после сбоя завершения транзакции, в которой они участвовали. Чтобы получить устойчивый зачисление в транзакцию, используйте EnlistDurable метод. Дополнительные сведения о переменных и устойчивых ресурсах, а также о том, как заручиться ресурсом, см. в разделе "Реализация Resource Manager". Дополнительные сведения о том, как диспетчер ресурсов реагирует на уведомление о фиксации и подготовке фиксации, см. в разделе "Фиксация транзакции в Single-Phase и многофазном режиме".

Обратите внимание, что даже если реализация Resource Manager заручится этим методом, она не гарантирует, что она получает одну фазовую фиксацию. Диспетчер транзакций по-прежнему может отправлять уведомления о фиксации двух этапов. Дополнительные сведения об оптимизации однофазной фиксации см. в разделе "Оптимизация с помощью однофазной фиксации" и уведомления с одним этапом.

См. также раздел

Применяется к