public static void GetTransactionAttributes(Transaction transaction, out uint timeout, out IsolationFlags isoFlags, out string description)
 {
     XACTOPT xactopt;
     XACTTRANSINFO xacttransinfo;
     IDtcTransaction dtcTransaction = TransactionInterop.GetDtcTransaction(transaction);
     ITransactionOptions options = (ITransactionOptions) dtcTransaction;
     ISaneDtcTransaction transaction3 = (ISaneDtcTransaction) dtcTransaction;
     options.GetOptions(out xactopt);
     timeout = xactopt.ulTimeout;
     description = xactopt.szDescription;
     transaction3.GetTransactionInfo(out xacttransinfo);
     isoFlags = xacttransinfo.isoFlags;
 }
 public Microsoft.Transactions.Bridge.EnlistmentOptions CreateEnlistmentOptions(uint expires, bool expiresPresent, IsolationLevel isoLevel, IsolationFlags isoFlags, string description)
 {
     Microsoft.Transactions.Bridge.EnlistmentOptions options = new Microsoft.Transactions.Bridge.EnlistmentOptions {
         Expires = this.CalculateTimeout(expires, expiresPresent),
         IsoLevel = isoLevel
     };
     if (options.IsoLevel == IsolationLevel.Unspecified)
     {
         options.IsoLevel = IsolationLevel.Serializable;
     }
     options.IsolationFlags = isoFlags;
     options.Description = description;
     return options;
 }
        public static void GetTransactionAttributes(Transaction transaction,
                                                    out uint timeout,
                                                    out IsolationFlags isoFlags,
                                                    out string description)
        {
            IDtcTransaction dtcTransaction = TransactionInterop.GetDtcTransaction(transaction);
            ITransactionOptions transactionOptions = (ITransactionOptions)dtcTransaction;
            ISaneDtcTransaction saneTransaction = (ISaneDtcTransaction)dtcTransaction;

            XACTOPT options;
            transactionOptions.GetOptions(out options);

            // For transactions not created inside this process, this will be zero
            timeout = options.ulTimeout;

            description = options.szDescription;

            XACTTRANSINFO info;
            saneTransaction.GetTransactionInfo(out info);

            isoFlags = info.isoFlags;
        }
Ejemplo n.º 4
0
        // This is what a propagation token looks like:
        //
        // struct PropagationToken
        // {
        //     DWORD dwVersionMin;
        //     DWORD dwVersionMax;
        //     GUID guidTx;
        //     ISOLATIONLEVEL isoLevel;
        //     ISOFLAG isoFlags;
        //     ULONG cbSourceTmAddr;
        //     char szDesc[40];
        //     [etc]
        // }

        static byte[] MarshalPropagationToken(ref Guid transactionId,
                                              IsolationLevel isoLevel,
                                              IsolationFlags isoFlags,
                                              string description)
        {
            const int offsetof_guidTx   = 8;
            const int offsetof_isoLevel = 24;
            const int offsetof_isoFlags = 28;
            const int offsetof_szDesc   = 36;

            const int MaxDescriptionLength = 39;

            byte[] token = CreateFixedPropagationToken();

            // Replace transaction id
            byte[] transactionIdBytes = transactionId.ToByteArray();
            Array.Copy(transactionIdBytes, 0, token, offsetof_guidTx, transactionIdBytes.Length);

            // Replace isolation level
            byte[] isoLevelBytes = BitConverter.GetBytes((int)ConvertIsolationLevel(isoLevel));
            Array.Copy(isoLevelBytes, 0, token, offsetof_isoLevel, isoLevelBytes.Length);

            // Replace isolation flags
            byte[] isoFlagsBytes = BitConverter.GetBytes((int)isoFlags);
            Array.Copy(isoFlagsBytes, 0, token, offsetof_isoFlags, isoFlagsBytes.Length);

            // Replace description
            if (!string.IsNullOrEmpty(description))
            {
                byte[] descriptionBytes     = Encoding.UTF8.GetBytes(description);
                int    copyDescriptionBytes = Math.Min(descriptionBytes.Length, MaxDescriptionLength);

                Array.Copy(descriptionBytes, 0, token, offsetof_szDesc, copyDescriptionBytes);
                token[offsetof_szDesc + copyDescriptionBytes] = 0;
            }

            return(token);
        }
Ejemplo n.º 5
0
        public static void GetTransactionAttributes(Transaction transaction,
                                                    out uint timeout,
                                                    out IsolationFlags isoFlags,
                                                    out string description)
        {
            IDtcTransaction     dtcTransaction     = TransactionInterop.GetDtcTransaction(transaction);
            ITransactionOptions transactionOptions = (ITransactionOptions)dtcTransaction;
            ISaneDtcTransaction saneTransaction    = (ISaneDtcTransaction)dtcTransaction;

            XACTOPT options;

            transactionOptions.GetOptions(out options);

            // For transactions not created inside this process, this will be zero
            timeout = options.ulTimeout;

            description = options.szDescription;

            XACTTRANSINFO info;

            saneTransaction.GetTransactionInfo(out info);

            isoFlags = info.isoFlags;
        }
 private static byte[] MarshalPropagationToken(ref Guid transactionId, IsolationLevel isoLevel, IsolationFlags isoFlags, string description)
 {
     byte[] destinationArray = CreateFixedPropagationToken();
     byte[] sourceArray      = transactionId.ToByteArray();
     Array.Copy(sourceArray, 0, destinationArray, 8, sourceArray.Length);
     byte[] bytes = BitConverter.GetBytes((int)ConvertIsolationLevel(isoLevel));
     Array.Copy(bytes, 0, destinationArray, 0x18, bytes.Length);
     byte[] buffer4 = BitConverter.GetBytes((int)isoFlags);
     Array.Copy(buffer4, 0, destinationArray, 0x1c, buffer4.Length);
     if (!string.IsNullOrEmpty(description))
     {
         byte[] buffer5 = Encoding.UTF8.GetBytes(description);
         int    length  = Math.Min(buffer5.Length, 0x27);
         Array.Copy(buffer5, 0, destinationArray, 0x24, length);
         destinationArray[0x24 + length] = 0;
     }
     return(destinationArray);
 }
 public Microsoft.Transactions.Bridge.EnlistmentOptions CreateEnlistmentOptions(uint expires, bool expiresPresent, IsolationLevel isoLevel, IsolationFlags isoFlags, string description)
 {
     Microsoft.Transactions.Bridge.EnlistmentOptions options = new Microsoft.Transactions.Bridge.EnlistmentOptions {
         Expires  = this.CalculateTimeout(expires, expiresPresent),
         IsoLevel = isoLevel
     };
     if (options.IsoLevel == IsolationLevel.Unspecified)
     {
         options.IsoLevel = IsolationLevel.Serializable;
     }
     options.IsolationFlags = isoFlags;
     options.Description    = description;
     return(options);
 }
        public static void GetTransactionAttributes(Transaction transaction, out uint timeout, out IsolationFlags isoFlags, out string description)
        {
            XACTOPT             xactopt;
            XACTTRANSINFO       xacttransinfo;
            IDtcTransaction     dtcTransaction = TransactionInterop.GetDtcTransaction(transaction);
            ITransactionOptions options        = (ITransactionOptions)dtcTransaction;
            ISaneDtcTransaction transaction3   = (ISaneDtcTransaction)dtcTransaction;

            options.GetOptions(out xactopt);
            timeout     = xactopt.ulTimeout;
            description = xactopt.szDescription;
            transaction3.GetTransactionInfo(out xacttransinfo);
            isoFlags = xacttransinfo.isoFlags;
        }
 private static byte[] MarshalPropagationToken(ref Guid transactionId, IsolationLevel isoLevel, IsolationFlags isoFlags, string description)
 {
     byte[] destinationArray = CreateFixedPropagationToken();
     byte[] sourceArray = transactionId.ToByteArray();
     Array.Copy(sourceArray, 0, destinationArray, 8, sourceArray.Length);
     byte[] bytes = BitConverter.GetBytes((int) ConvertIsolationLevel(isoLevel));
     Array.Copy(bytes, 0, destinationArray, 0x18, bytes.Length);
     byte[] buffer4 = BitConverter.GetBytes((int) isoFlags);
     Array.Copy(buffer4, 0, destinationArray, 0x1c, buffer4.Length);
     if (!string.IsNullOrEmpty(description))
     {
         byte[] buffer5 = Encoding.UTF8.GetBytes(description);
         int length = Math.Min(buffer5.Length, 0x27);
         Array.Copy(buffer5, 0, destinationArray, 0x24, length);
         destinationArray[0x24 + length] = 0;
     }
     return destinationArray;
 }
Ejemplo n.º 10
0
        // This is what a propagation token looks like:
        //
        // struct PropagationToken
        // {
        //     DWORD dwVersionMin;
        //     DWORD dwVersionMax;
        //     GUID guidTx;
        //     ISOLATIONLEVEL isoLevel;
        //     ISOFLAG isoFlags;
        //     ULONG cbSourceTmAddr;
        //     char szDesc[40];
        //     [etc]
        // }

        static byte[] MarshalPropagationToken(ref Guid transactionId,
                                              IsolationLevel isoLevel,
                                              IsolationFlags isoFlags,
                                              string description)
        {
            const int offsetof_guidTx = 8;
            const int offsetof_isoLevel = 24;
            const int offsetof_isoFlags = 28;
            const int offsetof_szDesc = 36;

            const int MaxDescriptionLength = 39;

            byte[] token = CreateFixedPropagationToken();

            // Replace transaction id
            byte[] transactionIdBytes = transactionId.ToByteArray();
            Array.Copy(transactionIdBytes, 0, token, offsetof_guidTx, transactionIdBytes.Length);

            // Replace isolation level
            byte[] isoLevelBytes = BitConverter.GetBytes((int)ConvertIsolationLevel(isoLevel));
            Array.Copy(isoLevelBytes, 0, token, offsetof_isoLevel, isoLevelBytes.Length);

            // Replace isolation flags
            byte[] isoFlagsBytes = BitConverter.GetBytes((int)isoFlags);
            Array.Copy(isoFlagsBytes, 0, token, offsetof_isoFlags, isoFlagsBytes.Length);

            // Replace description
            if (!string.IsNullOrEmpty(description))
            {
                byte[] descriptionBytes = Encoding.UTF8.GetBytes(description);
                int copyDescriptionBytes = Math.Min(descriptionBytes.Length, MaxDescriptionLength);

                Array.Copy(descriptionBytes, 0, token, offsetof_szDesc, copyDescriptionBytes);
                token[offsetof_szDesc + copyDescriptionBytes] = 0;
            }

            return token;
        }