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
- PartialClassGenerationTaskInternal.cs
- BulletChrome.cs
- wmiprovider.cs
- RegexCaptureCollection.cs
- ProviderCollection.cs
- ProxyHwnd.cs
- XMLSyntaxException.cs
- LinkClickEvent.cs
- ConstNode.cs
- VariableExpressionConverter.cs
- WebPartEventArgs.cs
- XmlRawWriter.cs
- SmtpNtlmAuthenticationModule.cs
- CacheOutputQuery.cs
- TextModifierScope.cs
- ViewGenResults.cs
- ConnectionPoolManager.cs
- RegistryDataKey.cs
- WinFormsComponentEditor.cs
- ClientScriptManager.cs
- XmlSchemaSubstitutionGroup.cs
- DoubleAnimationUsingPath.cs
- XmlCharCheckingWriter.cs
- RelAssertionDirectKeyIdentifierClause.cs
- StringDictionary.cs
- WebColorConverter.cs
- StringUtil.cs
- WmiEventSink.cs
- SecurityIdentifierElement.cs
- RequestCachePolicy.cs
- BufferModeSettings.cs
- DataServiceKeyAttribute.cs
- PersonalizationAdministration.cs
- HttpServerVarsCollection.cs
- HideDisabledControlAdapter.cs
- Rijndael.cs
- CroppedBitmap.cs
- ConsumerConnectionPointCollection.cs
- Hashtable.cs
- MetafileHeader.cs
- GridViewRow.cs
- input.cs
- UndoManager.cs
- AttributeEmitter.cs
- EntityDataSourceQueryBuilder.cs
- SortQueryOperator.cs
- FormattedText.cs
- WmiInstallComponent.cs
- Convert.cs
- Point3DValueSerializer.cs
- RawStylusInputCustomDataList.cs
- DoubleCollectionValueSerializer.cs
- XPathSelfQuery.cs
- Scheduler.cs
- ClientCultureInfo.cs
- MailMessageEventArgs.cs
- AnimationClockResource.cs
- ItemTypeToolStripMenuItem.cs
- ParserExtension.cs
- ConstNode.cs
- SoapUnknownHeader.cs
- ContextMenuStrip.cs
- ConnectionManagementElementCollection.cs
- TreeNodeClickEventArgs.cs
- ScriptControlManager.cs
- Graph.cs
- KeyPullup.cs
- XsltFunctions.cs
- RootProfilePropertySettingsCollection.cs
- SqlCacheDependencyDatabaseCollection.cs
- ComponentEvent.cs
- ForEachAction.cs
- TrustLevel.cs
- TempFiles.cs
- SizeChangedEventArgs.cs
- WebServiceParameterData.cs
- StatusStrip.cs
- ModelServiceImpl.cs
- StateRuntime.cs
- Int16AnimationUsingKeyFrames.cs
- ReadOnlyDataSource.cs
- EncodingFallbackAwareXmlTextWriter.cs
- RecipientInfo.cs
- SelectionProviderWrapper.cs
- base64Transforms.cs
- ImageList.cs
- Logging.cs
- ChtmlFormAdapter.cs
- DependencyPropertyConverter.cs
- Parser.cs
- TimeoutValidationAttribute.cs
- PathHelper.cs
- PixelFormatConverter.cs
- ByteAnimationUsingKeyFrames.cs
- SymbolUsageManager.cs
- DefaultPropertiesToSend.cs
- SwitchDesigner.xaml.cs
- SecurityDescriptor.cs
- FormViewModeEventArgs.cs
- DataTableReaderListener.cs