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
- TextUtf8RawTextWriter.cs
- XmlSignificantWhitespace.cs
- NameValueSectionHandler.cs
- Environment.cs
- _SecureChannel.cs
- XmlSchemaObjectTable.cs
- ToolStripStatusLabel.cs
- CheckedPointers.cs
- PasswordTextNavigator.cs
- latinshape.cs
- WhileDesigner.cs
- ProbeRequestResponseAsyncResult.cs
- ContentType.cs
- UnknownBitmapEncoder.cs
- DbDataRecord.cs
- _Semaphore.cs
- CollectionBuilder.cs
- OverrideMode.cs
- TreeNodeStyle.cs
- XmlSchemaDatatype.cs
- ErrorEventArgs.cs
- PublisherMembershipCondition.cs
- MSHTMLHost.cs
- MemberInfoSerializationHolder.cs
- ConstraintManager.cs
- MethodSignatureGenerator.cs
- XmlDataLoader.cs
- DataGridRow.cs
- ChangeNode.cs
- NotifyIcon.cs
- typedescriptorpermissionattribute.cs
- Color.cs
- Nodes.cs
- XsdDateTime.cs
- XPathCompileException.cs
- LinkedList.cs
- FormsAuthenticationEventArgs.cs
- EntityContainer.cs
- LocalizableResourceBuilder.cs
- DataGridRow.cs
- NamedPipeDuplicateContext.cs
- RefExpr.cs
- PropertyEntry.cs
- LabelEditEvent.cs
- XpsImage.cs
- ParenExpr.cs
- PageHandlerFactory.cs
- DataPagerFieldCommandEventArgs.cs
- IndentedWriter.cs
- LocatorPart.cs
- InputLanguageCollection.cs
- CompiledIdentityConstraint.cs
- ComponentEditorPage.cs
- HttpSessionStateWrapper.cs
- EncodingDataItem.cs
- DataBoundLiteralControl.cs
- GraphicsContainer.cs
- WebEncodingValidatorAttribute.cs
- StylusCollection.cs
- NativeMethodsOther.cs
- ConfigurationSectionCollection.cs
- InfoCardBinaryReader.cs
- FixedElement.cs
- ZoneIdentityPermission.cs
- Win32KeyboardDevice.cs
- RoleServiceManager.cs
- RefreshEventArgs.cs
- HwndSourceParameters.cs
- ApplicationSecurityInfo.cs
- HttpServerVarsCollection.cs
- ToolStripPanel.cs
- Missing.cs
- ConnectorEditor.cs
- SecurityDescriptor.cs
- Clipboard.cs
- _DigestClient.cs
- ArraySegment.cs
- LinkTarget.cs
- Grant.cs
- FileLogRecord.cs
- CounterCreationDataCollection.cs
- XmlMembersMapping.cs
- SiteMapNode.cs
- FontFamilyConverter.cs
- CellRelation.cs
- RegisteredScript.cs
- PrintDialog.cs
- WindowsFormsSectionHandler.cs
- FacetDescriptionElement.cs
- DataSourceControl.cs
- AlignmentXValidation.cs
- DataGridColumnCollectionEditor.cs
- PrimitiveDataContract.cs
- StateMachine.cs
- XmlLanguage.cs
- AppliesToBehaviorDecisionTable.cs
- PageTextBox.cs
- CqlLexer.cs
- InlinedAggregationOperatorEnumerator.cs
- Brush.cs