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;
///
///
/// [To be supplied.]
///
public class MessageQueueTransaction : IDisposable {
private ITransaction internalTransaction;
private MessageQueueTransactionStatus transactionStatus;
private bool disposed;
///
///
///
/// Creates a new Message Queuing internal transaction context.
///
///
public MessageQueueTransaction() {
this.transactionStatus = MessageQueueTransactionStatus.Initialized;
}
internal ITransaction InnerTransaction {
get {
return this.internalTransaction;
}
}
///
///
///
/// The status of the transaction that this object represents.
///
///
public MessageQueueTransactionStatus Status {
get {
return this.transactionStatus;
}
}
///
///
///
/// Rolls back the pending internal transaction.
///
///
public void Abort() {
lock (this) {
if (this.internalTransaction == null)
throw new InvalidOperationException(Res.GetString(Res.TransactionNotStarted));
else {
this.AbortInternalTransaction();
}
}
}
///
///
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;
}
///
///
///
/// Begins a new Message Queuing internal transaction context.
///
///
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;
}
}
}
///
///
internal ITransaction BeginQueueOperation() {
#pragma warning disable 0618
//@
Monitor.Enter(this);
#pragma warning restore 0618
return this.internalTransaction;
}
///
///
///
/// Commits a pending internal transaction.
///
///
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;
}
}
}
///
///
///
/// Disposes this transaction instance, if it is in a
/// pending status, the transaction will be aborted.
///
///
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
///
///
///
///
///
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
- ProtocolViolationException.cs
- SingleSelectRootGridEntry.cs
- COM2IVsPerPropertyBrowsingHandler.cs
- XmlNodeList.cs
- FontWeights.cs
- TablePattern.cs
- CurrentChangingEventManager.cs
- SourceElementsCollection.cs
- Directory.cs
- SqlCommandBuilder.cs
- ComponentConverter.cs
- Int32CollectionConverter.cs
- HeaderUtility.cs
- TextTreeTextElementNode.cs
- InheritanceContextChangedEventManager.cs
- Preprocessor.cs
- HelpInfo.cs
- MissingMemberException.cs
- ProjectionRewriter.cs
- OrderToken.cs
- Size3DValueSerializer.cs
- WebHttpEndpoint.cs
- ComponentResourceKeyConverter.cs
- PageClientProxyGenerator.cs
- QilSortKey.cs
- SafeNativeMemoryHandle.cs
- SQLDateTimeStorage.cs
- PageWrapper.cs
- SecurityContext.cs
- SelectionService.cs
- DockPattern.cs
- Vector3D.cs
- PagerStyle.cs
- SmtpSection.cs
- SqlCommandBuilder.cs
- GradientBrush.cs
- FtpWebResponse.cs
- StreamUpdate.cs
- WsrmFault.cs
- DataList.cs
- DesignerObject.cs
- TouchFrameEventArgs.cs
- ZipIOExtraFieldPaddingElement.cs
- CorrelationTokenInvalidatedHandler.cs
- AnnotationComponentChooser.cs
- QuaternionAnimationUsingKeyFrames.cs
- HttpBrowserCapabilitiesBase.cs
- UnsafeNativeMethods.cs
- CodeFieldReferenceExpression.cs
- EDesignUtil.cs
- DoubleAnimationUsingPath.cs
- EventArgs.cs
- TextTrailingWordEllipsis.cs
- FacetChecker.cs
- SelectionEditingBehavior.cs
- Configuration.cs
- TaskFormBase.cs
- ConnectionsZoneDesigner.cs
- InheritanceRules.cs
- Wizard.cs
- MSAANativeProvider.cs
- SqlGenericUtil.cs
- EntityDataSourceColumn.cs
- EdmMember.cs
- EncodingNLS.cs
- DocumentReferenceCollection.cs
- Clipboard.cs
- FacetValueContainer.cs
- DnsPermission.cs
- ConfigsHelper.cs
- StylusPointPropertyId.cs
- InterleavedZipPartStream.cs
- SecurityTokenException.cs
- ObjectKeyFrameCollection.cs
- Panel.cs
- ContextMenuAutomationPeer.cs
- HttpCacheVaryByContentEncodings.cs
- PrimitiveXmlSerializers.cs
- BuilderPropertyEntry.cs
- _Connection.cs
- Stacktrace.cs
- ResourcePermissionBaseEntry.cs
- WinEventTracker.cs
- _ContextAwareResult.cs
- AttributeSetAction.cs
- ReadOnlyDataSource.cs
- BamlBinaryWriter.cs
- HWStack.cs
- ConnectionConsumerAttribute.cs
- TypeLibraryHelper.cs
- TagPrefixAttribute.cs
- GlyphRunDrawing.cs
- LinkedResource.cs
- RtfControlWordInfo.cs
- SignatureDescription.cs
- UpdateException.cs
- MenuItemBinding.cs
- StoreContentChangedEventArgs.cs
- GridLengthConverter.cs
- Schema.cs