Compensator Klasa

Definicja

Reprezentuje klasę bazową dla wszystkich wyrównywujących Resource Manager (CRM).

C#
public class Compensator : System.EnterpriseServices.ServicedComponent
Dziedziczenie

Przykłady

Poniższy przykład kodu pokazuje użycie tej klasy.

C#
// A CRM Compensator
public class AccountCompensator : Compensator
{

    private bool receivedPrepareRecord = false;

    public override void BeginPrepare ()
    {
        // nothing to do
    }

    public override bool PrepareRecord (LogRecord log)
    {

        // Check the validity of the record.
        if (log == null) return(true);
        Object[] record = log.Record as Object[];
        if (record == null) return(true);
        if (record.Length != 2) return(true);

        // The record is valid.
        receivedPrepareRecord = true;
        return(false);
    }

    public override bool EndPrepare ()
    {
        // Allow the transaction to proceed onlyif we have received a prepare record.
        if (receivedPrepareRecord)
        {
            return(true);
        }
        else
        {
            return(false);
        }
    }

    public override void BeginCommit (bool commit)
    {
        // nothing to do
    }

    public override bool CommitRecord (LogRecord log)
    {
        // nothing to do
        return(false);
    }

    public override void EndCommit ()
    {
        // nothing to do
    }

    public override void BeginAbort (bool abort)
    {
        // nothing to do
    }

    public override bool AbortRecord (LogRecord log)
    {

        // Check the validity of the record.
        if (log == null) return(true);
        Object[] record = log.Record as Object[];
        if (record == null) return(true);
        if (record.Length != 2) return(true);

        // Extract old account data from the record.
        string filename = (string) record[0];
        int balance = (int) record[1];

        // Restore the old state of the account.
        AccountManager.WriteAccountBalance(filename, balance);

        return(false);
    }

    public override void EndAbort ()
    {
        // nothing to do
    }
}

Ten kompensator jest używany przez następującą klasę procesu roboczego.

C#
// A CRM Worker
[Transaction]
public class Account : ServicedComponent
{

    // A data member for the account file name.
    private string filename;

    public string Filename
    {
        get
        {
            return(filename);
        }
        set
        {
            filename = value;
        }
    }

    // A boolean data member that determines whether to commit or abort the transaction.
    private bool commit;

    public bool AllowCommit
    {
        get
        {
            return(commit);
        }
        set
        {
            commit = value;
        }
    }

    // Debit the account,
    public void DebitAccount (int ammount)
    {

        // Create a new clerk using the AccountCompensator class.
        Clerk clerk = new Clerk(typeof(AccountCompensator),
          "An account transaction compensator", CompensatorOptions.AllPhases);

        // Create a record of previous account status, and deliver it to the clerk.
        int balance = AccountManager.ReadAccountBalance(filename);

    Object[] record = new Object[2];
    record[0] = filename;
        record[1] = balance;

        clerk.WriteLogRecord(record);
        clerk.ForceLog();

        // Perform the transaction
        balance -= ammount;
        AccountManager.WriteAccountBalance(filename, balance);

        // Commit or abort the transaction
        if (commit)
        {
            ContextUtil.SetComplete();
        }
        else
        {
            ContextUtil.SetAbort();
        }
    }
}

W poniższym przykładzie kodu pokazano klienta, który wykonuje ćwiczenia wyrównywujące i robocze.

C#
using System;

public class CrmClient
{

    public static void Main ()
    {

        // Create a new account object. The object is created in a COM+ server application.
        Account account = new Account();

        // Transactionally debit the account.
        try
        {
            account.Filename = System.IO.Path.GetFullPath("JohnDoe");
            account.AllowCommit = true;
            account.DebitAccount(3);
        }
        finally
        {
            account.Dispose();
        }
    }
}

Uwagi

Użytkownik powinien rozszerzyć od tego obiektu w celu zapisania niestandardowego modułu kompensacyjnego transakcji.

Kompensator musi zawsze mieć konstruktor publiczny; w przeciwnym razie aparat odzyskiwania nie może go utworzyć.

Aby uzyskać więcej informacji, zobacz Instrukcje: Twórca Resource Manager wyrównywujące (CRM).

Konstruktory

Compensator()

Inicjuje nowe wystąpienie klasy Compensator.

Właściwości

Clerk

Pobiera wartość reprezentującą obiekt Resource Manager wyrównywujący (CRM). Clerk

Metody

AbortRecord(LogRecord)

Dostarcza rekord dziennika do wyrównywania Resource Manager (CRM) w fazie przerwania.

Activate()

Wywoływana przez infrastrukturę podczas tworzenia lub przydzielania obiektu z puli. Zastąpij tę metodę, aby dodać niestandardowy kod inicjowania do obiektów.

(Odziedziczone po ServicedComponent)
BeginAbort(Boolean)

Powiadamia wyrównywanie Resource Manager (CRM) fazy przerwania zakończenia transakcji oraz nadchodzące dostarczanie rekordów.

BeginCommit(Boolean)

Powiadamia wyrównywujący Resource Manager (CRM) kompensator fazy zatwierdzania ukończenia transakcji i nadchodzącego dostarczania rekordów.

BeginPrepare()

Powiadamia wyrównywujący Resource Manager (CRM) kompensator fazy przygotowania transakcji i nadchodzącego dostarczenia rekordów.

CanBePooled()

Ta metoda jest wywoływana przez infrastrukturę, zanim obiekt zostanie umieszczony z powrotem w puli. Zastąpij tę metodę, aby głosować nad tym, czy obiekt jest umieszczany z powrotem w puli.

(Odziedziczone po ServicedComponent)
CommitRecord(LogRecord)

Dostarcza rekord dziennika w kolejności przekazywania w fazie zatwierdzania.

Construct(String)

Wywoływana przez infrastrukturę tuż po wywołaniu konstruktora przekazuje ciąg konstruktora. Zastąpij tę metodę, aby użyć wartości ciągu konstrukcyjnego.

(Odziedziczone po ServicedComponent)
CreateObjRef(Type)

Tworzy obiekt zawierający wszystkie istotne informacje wymagane do wygenerowania serwera proxy używanego do komunikowania się z obiektem zdalnym.

(Odziedziczone po MarshalByRefObject)
Deactivate()

Wywoływana przez infrastrukturę, gdy obiekt ma zostać zdezaktywowany. Zastąpij tę metodę, aby dodać niestandardowy kod finalizacji do obiektów, gdy jest używany kod skompilowany just in time (JIT) lub buforowanie obiektów.

(Odziedziczone po ServicedComponent)
Dispose()

Zwalnia wszelkie zasoby używane przez element ServicedComponent.

(Odziedziczone po ServicedComponent)
Dispose(Boolean)

Zwalnia zasoby niezarządzane używane przez element ServicedComponent i opcjonalnie zwalnia zasoby zarządzane.

(Odziedziczone po ServicedComponent)
EndAbort()

Powiadamia wyrównywanie Resource Manager (CRM), że otrzymał wszystkie rekordy dziennika dostępne w fazie przerwania.

EndCommit()

Powiadamia wyrównywujący Resource Manager (CRM), że dostarczył wszystkie rekordy dziennika dostępne w fazie zatwierdzania.

EndPrepare()

Powiadamia wyrównywujący Resource Manager (CRM), że miał wszystkie rekordy dziennika dostępne w fazie przygotowania.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetLifetimeService()
Przestarzałe.

Pobiera bieżący obiekt usługi okresu istnienia, który kontroluje zasady okresu istnienia dla tego wystąpienia.

(Odziedziczone po MarshalByRefObject)
GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
InitializeLifetimeService()
Przestarzałe.

Uzyskuje obiekt usługi okresu istnienia, aby kontrolować zasady okresu istnienia dla tego wystąpienia.

(Odziedziczone po MarshalByRefObject)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
MemberwiseClone(Boolean)

Tworzy płytkią kopię bieżącego MarshalByRefObject obiektu.

(Odziedziczone po MarshalByRefObject)
PrepareRecord(LogRecord)

Dostarcza rekord dziennika w kolejności przesyłania dalej w fazie przygotowywania.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

IRemoteDispatch.RemoteDispatchAutoDone(String)

Ten interfejs API obsługuje infrastrukturę produktu i nie jest przeznaczony do użycia bezpośrednio z poziomu kodu.

Gwarantuje, że w kontekście ServicedComponent COM+ bit obiektu done klasy jest ustawiony na true wartość po wywołaniu metody zdalnej.

(Odziedziczone po ServicedComponent)
IRemoteDispatch.RemoteDispatchNotAutoDone(String)

Nie zapewnia, że w kontekście ServicedComponent COM+ bit obiektu done klasy jest ustawiony na true wartość po wywołaniu metody zdalnej.

(Odziedziczone po ServicedComponent)
IServicedComponentInfo.GetComponentInfo(Int32, String[])

Uzyskuje pewne informacje o wystąpieniu ServicedComponent klasy.

(Odziedziczone po ServicedComponent)

Dotyczy

Produkt Wersje
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1