Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WindowInteropHelper.cs
- DummyDataSource.cs
- DesignerHierarchicalDataSourceView.cs
- validationstate.cs
- MulticastNotSupportedException.cs
- StreamingContext.cs
- CustomAssemblyResolver.cs
- Base64Stream.cs
- CodeExpressionStatement.cs
- BlockUIContainer.cs
- PageAdapter.cs
- MexHttpsBindingCollectionElement.cs
- WebPartHeaderCloseVerb.cs
- BinaryCommonClasses.cs
- SqlClientWrapperSmiStream.cs
- DataObject.cs
- SecurityPermission.cs
- DataTableExtensions.cs
- SystemIPGlobalStatistics.cs
- PeerNameRegistration.cs
- SecurityRuntime.cs
- DataGridViewRowCollection.cs
- BridgeDataRecord.cs
- WmiEventSink.cs
- BuildDependencySet.cs
- EntryIndex.cs
- MouseCaptureWithinProperty.cs
- WebSysDisplayNameAttribute.cs
- EntityObject.cs
- RecognitionResult.cs
- CommonObjectSecurity.cs
- ObsoleteAttribute.cs
- ArithmeticLiteral.cs
- ProviderIncompatibleException.cs
- ViewBase.cs
- ColumnBinding.cs
- XmlSerializerOperationGenerator.cs
- CommandEventArgs.cs
- SystemUdpStatistics.cs
- ErrorHandlerModule.cs
- PackagePart.cs
- CodeBlockBuilder.cs
- _ChunkParse.cs
- PointConverter.cs
- CodeTypeDelegate.cs
- SqlDataSource.cs
- XmlAttributeHolder.cs
- RSAPKCS1SignatureFormatter.cs
- ObjectMaterializedEventArgs.cs
- ProcessHost.cs
- BitmapMetadataBlob.cs
- EntityDataSource.cs
- PreProcessInputEventArgs.cs
- CancellationTokenRegistration.cs
- ContainerParaClient.cs
- CodeRegionDirective.cs
- wpf-etw.cs
- XmlLanguage.cs
- Soap.cs
- TypeResolvingOptions.cs
- InitializerFacet.cs
- XmlSchemaElement.cs
- HandlerMappingMemo.cs
- ReachIDocumentPaginatorSerializer.cs
- DesignerTransactionCloseEvent.cs
- HttpCachePolicy.cs
- DeviceContexts.cs
- EUCJPEncoding.cs
- EntityDataReader.cs
- FormViewCommandEventArgs.cs
- SortedDictionary.cs
- NameValueCollection.cs
- Span.cs
- BooleanExpr.cs
- XmlHierarchicalDataSourceView.cs
- LocatorManager.cs
- SessionStateSection.cs
- TemplatedMailWebEventProvider.cs
- IImplicitResourceProvider.cs
- TraceHandlerErrorFormatter.cs
- ComNativeDescriptor.cs
- ListViewItemMouseHoverEvent.cs
- DomNameTable.cs
- DateTimeHelper.cs
- GenerateTemporaryAssemblyTask.cs
- VisualStyleRenderer.cs
- TreeViewItem.cs
- MatrixValueSerializer.cs
- Encoder.cs
- AnchorEditor.cs
- StringInfo.cs
- TextFindEngine.cs
- ExpressionCopier.cs
- PackUriHelper.cs
- ObjectToIdCache.cs
- StylusPointPropertyInfoDefaults.cs
- CatalogPartCollection.cs
- BindingsCollection.cs
- IntSecurity.cs
- SQLDouble.cs