Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / RunTime / Hosting / SharedConnectionInfo.cs / 1305376 / SharedConnectionInfo.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- #region Using directives using System; using System.Diagnostics; using System.Transactions; using System.Data.Common; using System.Threading; #endregion namespace System.Workflow.Runtime.Hosting { ////// This class keeps the following associated with a Transaction /// - a connection that participates in the transaction. /// - an optional local transaction (DbTransaction) generated from the single-phase-committed Transaction. /// The connection and the local transaction are passed around to different host components to /// do transacted DB work using the shared connection. /// internal sealed class SharedConnectionInfo : IDisposable { readonly DbConnection connection; readonly DbTransaction localTransaction; private bool disposed; private ManualResetEvent handle; #region Constructor ////// Instantiate an opened connection enlisted to the Transaction /// if promotable is false, the Transaction wraps a local /// transaction inside and can never be promoted /// /// /// /// internal SharedConnectionInfo( DbResourceAllocator dbResourceAllocator, Transaction transaction, bool wantPromotable, ManualResetEvent handle) { Debug.Assert((transaction != null), "Null Transaction!"); if (null == handle) throw new ArgumentNullException("handle"); this.handle = handle; if (wantPromotable) { // Enlist a newly opened connection to this regular Transaction this.connection = dbResourceAllocator.OpenNewConnection(); this.connection.EnlistTransaction(transaction); } else { // Make this transaction no longer promotable by attaching our // IPromotableSinglePhaseNotification implementation (LocalTranscaction) // and track the DbConnection and DbTransaction associated with the LocalTranscaction LocalTransaction localTransaction = new LocalTransaction(dbResourceAllocator,handle); transaction.EnlistPromotableSinglePhase(localTransaction); this.connection = localTransaction.Connection; this.localTransaction = localTransaction.Transaction; } } #endregion Constructor #region Accessors internal DbConnection DBConnection { get { return this.connection; } } internal DbTransaction DBTransaction { get { return this.localTransaction; } } #endregion Accessors #region IDisposable Members public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (!this.disposed) { // // If we're using a LocalTransaction it will close the connection // in it's IPromotableSinglePhaseNotification methods if ((this.localTransaction == null)&&(null != connection)) this.connection.Dispose(); } this.disposed = true; } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- #region Using directives using System; using System.Diagnostics; using System.Transactions; using System.Data.Common; using System.Threading; #endregion namespace System.Workflow.Runtime.Hosting { ////// This class keeps the following associated with a Transaction /// - a connection that participates in the transaction. /// - an optional local transaction (DbTransaction) generated from the single-phase-committed Transaction. /// The connection and the local transaction are passed around to different host components to /// do transacted DB work using the shared connection. /// internal sealed class SharedConnectionInfo : IDisposable { readonly DbConnection connection; readonly DbTransaction localTransaction; private bool disposed; private ManualResetEvent handle; #region Constructor ////// Instantiate an opened connection enlisted to the Transaction /// if promotable is false, the Transaction wraps a local /// transaction inside and can never be promoted /// /// /// /// internal SharedConnectionInfo( DbResourceAllocator dbResourceAllocator, Transaction transaction, bool wantPromotable, ManualResetEvent handle) { Debug.Assert((transaction != null), "Null Transaction!"); if (null == handle) throw new ArgumentNullException("handle"); this.handle = handle; if (wantPromotable) { // Enlist a newly opened connection to this regular Transaction this.connection = dbResourceAllocator.OpenNewConnection(); this.connection.EnlistTransaction(transaction); } else { // Make this transaction no longer promotable by attaching our // IPromotableSinglePhaseNotification implementation (LocalTranscaction) // and track the DbConnection and DbTransaction associated with the LocalTranscaction LocalTransaction localTransaction = new LocalTransaction(dbResourceAllocator,handle); transaction.EnlistPromotableSinglePhase(localTransaction); this.connection = localTransaction.Connection; this.localTransaction = localTransaction.Transaction; } } #endregion Constructor #region Accessors internal DbConnection DBConnection { get { return this.connection; } } internal DbTransaction DBTransaction { get { return this.localTransaction; } } #endregion Accessors #region IDisposable Members public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (!this.disposed) { // // If we're using a LocalTransaction it will close the connection // in it's IPromotableSinglePhaseNotification methods if ((this.localTransaction == null)&&(null != connection)) this.connection.Dispose(); } this.disposed = true; } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MultiTouchSystemGestureLogic.cs
- ImmutableAssemblyCacheEntry.cs
- OutputScopeManager.cs
- FormView.cs
- Symbol.cs
- XmlSchemaValidator.cs
- DataServiceException.cs
- FigureHelper.cs
- SharedDp.cs
- QueuePathEditor.cs
- XamlWriterExtensions.cs
- IDispatchConstantAttribute.cs
- UInt64.cs
- MouseButtonEventArgs.cs
- HwndHost.cs
- ToolStripDropDownButton.cs
- ThicknessAnimationUsingKeyFrames.cs
- ColumnBinding.cs
- MobileControlsSectionHandler.cs
- ServiceOperation.cs
- ComAdminWrapper.cs
- ChannelPool.cs
- HwndSource.cs
- SchemaElementLookUpTable.cs
- ControlSerializer.cs
- CodeCatchClause.cs
- PrefixHandle.cs
- BitmapMetadataBlob.cs
- XmlNamedNodeMap.cs
- LostFocusEventManager.cs
- ComponentResourceKey.cs
- Variable.cs
- CodeTypeReferenceCollection.cs
- Glyph.cs
- AssociationEndMember.cs
- CheckBoxList.cs
- ConnectionProviderAttribute.cs
- PassportPrincipal.cs
- EntityDesignerUtils.cs
- ExpanderAutomationPeer.cs
- DataTableMappingCollection.cs
- ToolStripItemClickedEventArgs.cs
- StreamGeometryContext.cs
- PropertyGridView.cs
- HyperLinkStyle.cs
- NativeMethods.cs
- MemoryPressure.cs
- DataSourceCache.cs
- __Error.cs
- DateTimeStorage.cs
- HttpFileCollection.cs
- GrowingArray.cs
- TaiwanLunisolarCalendar.cs
- WebBrowserNavigatingEventHandler.cs
- UnorderedHashRepartitionStream.cs
- EditorPartChrome.cs
- HierarchicalDataTemplate.cs
- ScriptResourceInfo.cs
- HttpCookie.cs
- HttpChannelBindingToken.cs
- UpdateCommand.cs
- DataView.cs
- BinaryUtilClasses.cs
- MimeTypeAttribute.cs
- ASCIIEncoding.cs
- Statements.cs
- HTMLTextWriter.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- WeakReadOnlyCollection.cs
- WindowsHyperlink.cs
- EntityExpressionVisitor.cs
- CacheRequest.cs
- TabControl.cs
- UpDownEvent.cs
- TextEditorCharacters.cs
- cookiecollection.cs
- GradientBrush.cs
- SymmetricKeyWrap.cs
- ExpressionDumper.cs
- XmlAttributeAttribute.cs
- DefaultSettingsSection.cs
- CustomSignedXml.cs
- WebPartsPersonalizationAuthorization.cs
- XMLSchema.cs
- Vertex.cs
- ChangeInterceptorAttribute.cs
- userdatakeys.cs
- InputReportEventArgs.cs
- SectionInformation.cs
- LocalBuilder.cs
- METAHEADER.cs
- PublisherMembershipCondition.cs
- SmiTypedGetterSetter.cs
- Int64Converter.cs
- XmlTypeMapping.cs
- SequentialUshortCollection.cs
- DriveInfo.cs
- BigInt.cs
- TimeoutHelper.cs
- RegexMatchCollection.cs