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; }
// 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); }
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; }
// 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; }