Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Services / Messaging / System / Messaging / MessageQueueTransaction.cs / 1305376 / MessageQueueTransaction.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Messaging { using System.Threading; using System.Diagnostics; using System.Messaging.Interop; ////// /// public class MessageQueueTransaction : IDisposable { private ITransaction internalTransaction; private MessageQueueTransactionStatus transactionStatus; private bool disposed; ///[To be supplied.] ////// /// public MessageQueueTransaction() { this.transactionStatus = MessageQueueTransactionStatus.Initialized; } internal ITransaction InnerTransaction { get { return this.internalTransaction; } } ////// Creates a new Message Queuing internal transaction context. /// ////// /// public MessageQueueTransactionStatus Status { get { return this.transactionStatus; } } ////// The status of the transaction that this object represents. /// ////// /// public void Abort() { lock (this) { if (this.internalTransaction == null) throw new InvalidOperationException(Res.GetString(Res.TransactionNotStarted)); else { this.AbortInternalTransaction(); } } } ////// Rolls back the pending internal transaction. /// ////// private void AbortInternalTransaction() { int status = this.internalTransaction.Abort(0, 0, 0); if (MessageQueue.IsFatalError(status)) throw new MessageQueueException(status); this.internalTransaction = null; this.transactionStatus = MessageQueueTransactionStatus.Aborted; } /// /// /// public void Begin() { //Won't allow begining a new transaction after the object has been disposed. if (this.disposed) throw new ObjectDisposedException(GetType().Name); lock (this) { if (internalTransaction != null) throw new InvalidOperationException(Res.GetString(Res.TransactionStarted)); else { int status = SafeNativeMethods.MQBeginTransaction(out this.internalTransaction); if (MessageQueue.IsFatalError(status)) { this.internalTransaction = null; throw new MessageQueueException(status); } this.transactionStatus = MessageQueueTransactionStatus.Pending; } } } ////// Begins a new Message Queuing internal transaction context. /// ////// internal ITransaction BeginQueueOperation() { #pragma warning disable 0618 //@ Monitor.Enter(this); #pragma warning restore 0618 return this.internalTransaction; } /// /// /// public void Commit() { lock (this) { if (this.internalTransaction == null) throw new InvalidOperationException(Res.GetString(Res.TransactionNotStarted)); else { int status = this.internalTransaction.Commit(0, 0, 0); if (MessageQueue.IsFatalError(status)) throw new MessageQueueException(status); this.internalTransaction = null; this.transactionStatus = MessageQueueTransactionStatus.Committed; } } } ////// Commits a pending internal transaction. /// ////// /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } ////// Disposes this transaction instance, if it is in a /// pending status, the transaction will be aborted. /// ////// /// protected virtual void Dispose(bool disposing) { if (disposing) { lock (this) { if (internalTransaction != null) this.AbortInternalTransaction(); } } this.disposed = true; } ////// ////// ~MessageQueueTransaction() { Dispose(false); } /// /// internal void EndQueueOperation() { Monitor.Exit(this); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Messaging { using System.Threading; using System.Diagnostics; using System.Messaging.Interop; ////// /// public class MessageQueueTransaction : IDisposable { private ITransaction internalTransaction; private MessageQueueTransactionStatus transactionStatus; private bool disposed; ///[To be supplied.] ////// /// public MessageQueueTransaction() { this.transactionStatus = MessageQueueTransactionStatus.Initialized; } internal ITransaction InnerTransaction { get { return this.internalTransaction; } } ////// Creates a new Message Queuing internal transaction context. /// ////// /// public MessageQueueTransactionStatus Status { get { return this.transactionStatus; } } ////// The status of the transaction that this object represents. /// ////// /// public void Abort() { lock (this) { if (this.internalTransaction == null) throw new InvalidOperationException(Res.GetString(Res.TransactionNotStarted)); else { this.AbortInternalTransaction(); } } } ////// Rolls back the pending internal transaction. /// ////// private void AbortInternalTransaction() { int status = this.internalTransaction.Abort(0, 0, 0); if (MessageQueue.IsFatalError(status)) throw new MessageQueueException(status); this.internalTransaction = null; this.transactionStatus = MessageQueueTransactionStatus.Aborted; } /// /// /// public void Begin() { //Won't allow begining a new transaction after the object has been disposed. if (this.disposed) throw new ObjectDisposedException(GetType().Name); lock (this) { if (internalTransaction != null) throw new InvalidOperationException(Res.GetString(Res.TransactionStarted)); else { int status = SafeNativeMethods.MQBeginTransaction(out this.internalTransaction); if (MessageQueue.IsFatalError(status)) { this.internalTransaction = null; throw new MessageQueueException(status); } this.transactionStatus = MessageQueueTransactionStatus.Pending; } } } ////// Begins a new Message Queuing internal transaction context. /// ////// internal ITransaction BeginQueueOperation() { #pragma warning disable 0618 //@ Monitor.Enter(this); #pragma warning restore 0618 return this.internalTransaction; } /// /// /// public void Commit() { lock (this) { if (this.internalTransaction == null) throw new InvalidOperationException(Res.GetString(Res.TransactionNotStarted)); else { int status = this.internalTransaction.Commit(0, 0, 0); if (MessageQueue.IsFatalError(status)) throw new MessageQueueException(status); this.internalTransaction = null; this.transactionStatus = MessageQueueTransactionStatus.Committed; } } } ////// Commits a pending internal transaction. /// ////// /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } ////// Disposes this transaction instance, if it is in a /// pending status, the transaction will be aborted. /// ////// /// protected virtual void Dispose(bool disposing) { if (disposing) { lock (this) { if (internalTransaction != null) this.AbortInternalTransaction(); } } this.disposed = true; } ////// ////// ~MessageQueueTransaction() { Dispose(false); } /// /// internal void EndQueueOperation() { Monitor.Exit(this); } } } // 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
- ApplicationGesture.cs
- UserPreferenceChangingEventArgs.cs
- CombinedGeometry.cs
- PeerCollaboration.cs
- DnsPermission.cs
- ProcessHostConfigUtils.cs
- SspiSecurityTokenProvider.cs
- ComplexPropertyEntry.cs
- SqlRemoveConstantOrderBy.cs
- ListViewCancelEventArgs.cs
- AstTree.cs
- GridViewEditEventArgs.cs
- RelationshipConverter.cs
- GridViewUpdatedEventArgs.cs
- JsonEncodingStreamWrapper.cs
- DataChangedEventManager.cs
- HijriCalendar.cs
- DefaultSection.cs
- IndexedString.cs
- RelationshipEnd.cs
- WebPartRestoreVerb.cs
- BaseTemplateCodeDomTreeGenerator.cs
- WebException.cs
- DesignerVerb.cs
- WebPartCatalogCloseVerb.cs
- CodeTypeOfExpression.cs
- PackWebResponse.cs
- EntityTypeEmitter.cs
- ControlAdapter.cs
- CopyOnWriteList.cs
- DispatcherOperation.cs
- UnsafeNativeMethods.cs
- XmlValidatingReader.cs
- ClientBuildManager.cs
- MethodBuilder.cs
- ExceptionRoutedEventArgs.cs
- InfoCardBaseException.cs
- DataGridTextBox.cs
- PocoEntityKeyStrategy.cs
- NoPersistScope.cs
- CodeAttributeDeclarationCollection.cs
- SystemWebCachingSectionGroup.cs
- AvTraceFormat.cs
- listviewsubitemcollectioneditor.cs
- AutoFocusStyle.xaml.cs
- CachedTypeface.cs
- DoubleLink.cs
- SamlSubjectStatement.cs
- AuthorizationSection.cs
- ItemType.cs
- ObsoleteAttribute.cs
- SourceInterpreter.cs
- CheckBoxFlatAdapter.cs
- WebZone.cs
- Accessible.cs
- Rotation3D.cs
- OleDbEnumerator.cs
- MouseActionConverter.cs
- LayoutExceptionEventArgs.cs
- MostlySingletonList.cs
- CriticalExceptions.cs
- Attributes.cs
- ConfigurationStrings.cs
- PropertyInfoSet.cs
- TimeZone.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- FontDialog.cs
- SetStateDesigner.cs
- NavigationProperty.cs
- UserControlBuildProvider.cs
- StoragePropertyMapping.cs
- DeleteHelper.cs
- ValueChangedEventManager.cs
- ColorDialog.cs
- TiffBitmapEncoder.cs
- ToolStripDropDownClosingEventArgs.cs
- ComponentResourceKeyConverter.cs
- WebSysDisplayNameAttribute.cs
- MaterialGroup.cs
- UiaCoreProviderApi.cs
- AddingNewEventArgs.cs
- PopupEventArgs.cs
- AppDomainUnloadedException.cs
- BoolExpression.cs
- ImageClickEventArgs.cs
- InternalCache.cs
- GridView.cs
- ForeignKeyFactory.cs
- CodeDomConfigurationHandler.cs
- CodeNamespace.cs
- SequentialWorkflowRootDesigner.cs
- Char.cs
- TraceXPathNavigator.cs
- AssemblyBuilder.cs
- SequenceDesigner.cs
- PropertyEmitter.cs
- PackWebResponse.cs
- XmlValidatingReaderImpl.cs
- BezierSegment.cs
- AssemblyAttributes.cs