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
- ReadOnlyHierarchicalDataSourceView.cs
- DbSetClause.cs
- UnSafeCharBuffer.cs
- DataGridViewControlCollection.cs
- ServiceModelReg.cs
- FactorySettingsElement.cs
- MessageQueuePermissionEntry.cs
- State.cs
- BamlResourceContent.cs
- PrintControllerWithStatusDialog.cs
- WebColorConverter.cs
- IssuedTokenClientElement.cs
- TableSectionStyle.cs
- AddingNewEventArgs.cs
- SamlAssertionKeyIdentifierClause.cs
- ResourceManagerWrapper.cs
- BuildProvider.cs
- BasicHttpBindingElement.cs
- Material.cs
- OptimizedTemplateContentHelper.cs
- BinaryReader.cs
- ReadOnlyDataSource.cs
- SinglePageViewer.cs
- XmlSerializationWriter.cs
- FieldMetadata.cs
- DefaultPerformanceCounters.cs
- TableParaClient.cs
- PiiTraceSource.cs
- LongAverageAggregationOperator.cs
- RealizationDrawingContextWalker.cs
- ConfigPathUtility.cs
- SchemaAttDef.cs
- StackSpiller.Generated.cs
- Matrix3DValueSerializer.cs
- xmlsaver.cs
- ValueQuery.cs
- SystemWebExtensionsSectionGroup.cs
- HttpContext.cs
- Volatile.cs
- KnownBoxes.cs
- WebHttpSecurityModeHelper.cs
- RegisteredArrayDeclaration.cs
- XmlSerializerAssemblyAttribute.cs
- UnsafeNativeMethods.cs
- WaitForChangedResult.cs
- MemoryMappedViewAccessor.cs
- ManagementException.cs
- DataKeyArray.cs
- WindowsFormsSynchronizationContext.cs
- ConfigurationElementCollection.cs
- DescendentsWalker.cs
- Int32Rect.cs
- EtwTrace.cs
- ActivitySurrogate.cs
- Vector.cs
- WebSysDisplayNameAttribute.cs
- SafeCoTaskMem.cs
- CounterSampleCalculator.cs
- ISFTagAndGuidCache.cs
- XmlDictionaryString.cs
- StickyNoteContentControl.cs
- CodeTypeParameter.cs
- Button.cs
- InheritanceAttribute.cs
- TextTreeText.cs
- As.cs
- ObjectManager.cs
- WebPartUtil.cs
- AuthenticationSection.cs
- StatusBar.cs
- CodeGen.cs
- ValidationSummary.cs
- Stylesheet.cs
- EmbeddedMailObject.cs
- TextEditorLists.cs
- HttpRequestCacheValidator.cs
- ECDsaCng.cs
- SpeechRecognitionEngine.cs
- DbProviderSpecificTypePropertyAttribute.cs
- RegistrySecurity.cs
- OrderedDictionary.cs
- SQLByteStorage.cs
- ParagraphResult.cs
- RowToParametersTransformer.cs
- DesignerUtility.cs
- DrawingState.cs
- SQLResource.cs
- SspiNegotiationTokenProvider.cs
- EarlyBoundInfo.cs
- FillRuleValidation.cs
- TypeProvider.cs
- BackEase.cs
- Int32Rect.cs
- TransactedBatchContext.cs
- Section.cs
- AutomationIdentifier.cs
- TransformationRules.cs
- TimeSpanHelper.cs
- EDesignUtil.cs
- Ticks.cs