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
- CodeValidator.cs
- ActivitiesCollection.cs
- TheQuery.cs
- ContextMenu.cs
- _NTAuthentication.cs
- AsyncInvokeContext.cs
- LinkConverter.cs
- AnonymousIdentificationSection.cs
- Metafile.cs
- WS2007FederationHttpBinding.cs
- SafeMILHandleMemoryPressure.cs
- NameValueConfigurationElement.cs
- TextEffect.cs
- DrawToolTipEventArgs.cs
- WebPartUserCapability.cs
- CounterSetInstance.cs
- StandardToolWindows.cs
- Mouse.cs
- EntityDataReader.cs
- CompiledXpathExpr.cs
- ShaperBuffers.cs
- XmlNavigatorStack.cs
- NotifyInputEventArgs.cs
- TriggerBase.cs
- XPathSingletonIterator.cs
- SelectionListDesigner.cs
- SelectionEditor.cs
- HMACSHA384.cs
- DataControlFieldCell.cs
- Bidi.cs
- AnimationClockResource.cs
- OdbcConnectionPoolProviderInfo.cs
- SecurityTokenContainer.cs
- DoubleCollection.cs
- DocumentGridPage.cs
- ViewStateException.cs
- StylusPlugInCollection.cs
- DbBuffer.cs
- ConsoleEntryPoint.cs
- CommandHelper.cs
- RangeEnumerable.cs
- FamilyMap.cs
- MemberDomainMap.cs
- DrawingCollection.cs
- MethodImplAttribute.cs
- Attributes.cs
- TempFiles.cs
- HighlightOverlayGlyph.cs
- DrawToolTipEventArgs.cs
- LinqExpressionNormalizer.cs
- DictationGrammar.cs
- PopOutPanel.cs
- Config.cs
- TypeInformation.cs
- CompressedStack.cs
- PropertyValueEditor.cs
- QualifiedCellIdBoolean.cs
- DBPropSet.cs
- NonClientArea.cs
- TextViewBase.cs
- DataGridViewCellParsingEventArgs.cs
- ScrollBar.cs
- MetadataUtilsSmi.cs
- CommonGetThemePartSize.cs
- SelectionRangeConverter.cs
- RadioButtonFlatAdapter.cs
- Schedule.cs
- Graph.cs
- DockEditor.cs
- QueryableDataSourceView.cs
- BufferBuilder.cs
- ContentElement.cs
- XmlSchemaSimpleTypeList.cs
- XmlSchemaObject.cs
- BooleanKeyFrameCollection.cs
- ConditionalAttribute.cs
- WindowsUpDown.cs
- SpoolingTaskBase.cs
- BrushProxy.cs
- ToolConsole.cs
- ExpressionParser.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- ResourceProviderFactory.cs
- XmlnsCompatibleWithAttribute.cs
- TitleStyle.cs
- DataBinding.cs
- ListViewTableRow.cs
- PageThemeBuildProvider.cs
- VSDExceptions.cs
- ISAPIRuntime.cs
- DefaultValueTypeConverter.cs
- QueryPageSettingsEventArgs.cs
- StringBlob.cs
- FileNotFoundException.cs
- FlowDocument.cs
- SortedDictionary.cs
- messageonlyhwndwrapper.cs
- RevocationPoint.cs
- xmlsaver.cs
- MatrixValueSerializer.cs