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
- IndependentAnimationStorage.cs
- SkewTransform.cs
- ReadWriteSpinLock.cs
- ParserStack.cs
- RuntimeWrappedException.cs
- SqlCaseSimplifier.cs
- XmlDomTextWriter.cs
- ConfigXmlElement.cs
- WindowsUpDown.cs
- HtmlEncodedRawTextWriter.cs
- NullableConverter.cs
- InlinedLocationReference.cs
- XdrBuilder.cs
- Vector3DValueSerializer.cs
- BulletedList.cs
- BigInt.cs
- DesignerSerializationManager.cs
- ObjectStateFormatter.cs
- HashMembershipCondition.cs
- HwndMouseInputProvider.cs
- RectangleF.cs
- MDIControlStrip.cs
- DataServiceHost.cs
- OLEDB_Enum.cs
- KeysConverter.cs
- SRGSCompiler.cs
- FontResourceCache.cs
- UrlMappingsSection.cs
- RequestCachePolicyConverter.cs
- _NtlmClient.cs
- NotImplementedException.cs
- WmlPanelAdapter.cs
- EntityModelSchemaGenerator.cs
- BrowserDefinitionCollection.cs
- TableLayoutPanelCodeDomSerializer.cs
- Type.cs
- Literal.cs
- ExclusiveHandle.cs
- ProfilePropertyMetadata.cs
- ClientSettingsSection.cs
- PixelFormat.cs
- CultureNotFoundException.cs
- CharConverter.cs
- FrameSecurityDescriptor.cs
- ViewPort3D.cs
- DataGridViewBand.cs
- Compiler.cs
- ThemeableAttribute.cs
- ADMembershipUser.cs
- Models.cs
- ScriptControlManager.cs
- PropertyFilterAttribute.cs
- GlyphInfoList.cs
- ThicknessAnimationBase.cs
- EditingScope.cs
- DefaultEvaluationContext.cs
- MimeMapping.cs
- DataGridItem.cs
- XNodeNavigator.cs
- TimeSpanOrInfiniteConverter.cs
- ConstructorNeedsTagAttribute.cs
- CodeExpressionStatement.cs
- RowVisual.cs
- CompilerTypeWithParams.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- AsyncStreamReader.cs
- Style.cs
- TreeViewAutomationPeer.cs
- TypeBuilder.cs
- PaperSize.cs
- AnnotationResource.cs
- CodeActivityMetadata.cs
- Logging.cs
- CapabilitiesState.cs
- CommandEventArgs.cs
- DataException.cs
- Axis.cs
- TextParagraphCache.cs
- OpenTypeMethods.cs
- ISFClipboardData.cs
- MarkupExtensionParser.cs
- DataGridHeaderBorder.cs
- PageCatalogPart.cs
- KeyboardEventArgs.cs
- HtmlInputRadioButton.cs
- LogExtentCollection.cs
- DynamicMethod.cs
- SplitterPanel.cs
- CheckBoxRenderer.cs
- XmlHierarchyData.cs
- BaseTemplateParser.cs
- GeneralTransform3DCollection.cs
- QilExpression.cs
- MessageFormatterConverter.cs
- WindowClosedEventArgs.cs
- XmlIlTypeHelper.cs
- DSASignatureDeformatter.cs
- _IPv4Address.cs
- activationcontext.cs
- BamlRecordHelper.cs