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
- SiteMapDataSourceView.cs
- ComPlusDiagnosticTraceSchemas.cs
- ScriptingProfileServiceSection.cs
- CodeEventReferenceExpression.cs
- HtmlSelect.cs
- TextDecorationCollection.cs
- EmptyReadOnlyDictionaryInternal.cs
- ProfileModule.cs
- AccessDataSource.cs
- BindableAttribute.cs
- TranslateTransform.cs
- StrongNameMembershipCondition.cs
- OLEDB_Util.cs
- NativeMethods.cs
- Processor.cs
- FaultConverter.cs
- PropertyDescriptorGridEntry.cs
- Semaphore.cs
- Tuple.cs
- MissingMemberException.cs
- MessageBuilder.cs
- DateTimePicker.cs
- WindowsTreeView.cs
- GridViewItemAutomationPeer.cs
- WebFormsRootDesigner.cs
- Compensation.cs
- WindowsToolbarAsMenu.cs
- CallbackValidator.cs
- formatter.cs
- Canvas.cs
- webproxy.cs
- X509WindowsSecurityToken.cs
- MappingMetadataHelper.cs
- IList.cs
- MsmqProcessProtocolHandler.cs
- XmlSchemaAnnotation.cs
- UnionExpr.cs
- HScrollProperties.cs
- ZeroOpNode.cs
- FamilyTypeface.cs
- StylusButtonCollection.cs
- HashHelper.cs
- Vector3DCollectionValueSerializer.cs
- Track.cs
- CfgRule.cs
- BitmapCacheBrush.cs
- MobileResource.cs
- Lease.cs
- DataGridViewCellValueEventArgs.cs
- InheritanceService.cs
- ButtonBaseAdapter.cs
- AstTree.cs
- DependencyObjectPropertyDescriptor.cs
- Missing.cs
- HtmlInputFile.cs
- ProtocolsInstallComponent.cs
- ItemMap.cs
- Quad.cs
- Duration.cs
- CodePageEncoding.cs
- Int64Storage.cs
- Operand.cs
- ColorAnimationBase.cs
- ConnectivityStatus.cs
- ModuleElement.cs
- FontFamilyConverter.cs
- SystemColors.cs
- BindingValueChangedEventArgs.cs
- AuthorizationPolicyTypeElementCollection.cs
- IndexedDataBuffer.cs
- DataGridLinkButton.cs
- StickyNoteHelper.cs
- DeferredReference.cs
- TimeSpanFormat.cs
- ToolboxSnapDragDropEventArgs.cs
- EpmHelper.cs
- OwnerDrawPropertyBag.cs
- DbModificationCommandTree.cs
- XmlExceptionHelper.cs
- CodeAccessSecurityEngine.cs
- RNGCryptoServiceProvider.cs
- PointValueSerializer.cs
- Model3D.cs
- Guid.cs
- TextWriterTraceListener.cs
- FeatureSupport.cs
- SmtpFailedRecipientException.cs
- DynamicDiscoveryDocument.cs
- CollectionConverter.cs
- UriTemplateQueryValue.cs
- BitmapEffectCollection.cs
- ValueTypePropertyReference.cs
- CollectionEditor.cs
- EmptyEnumerable.cs
- FloatUtil.cs
- XmlSerializableWriter.cs
- __ComObject.cs
- DescendantQuery.cs
- WebBrowserNavigatingEventHandler.cs
- AccessibleObject.cs