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
- dataobject.cs
- NewExpression.cs
- XmlDocument.cs
- TextRunCacheImp.cs
- processwaithandle.cs
- SmiContext.cs
- ProvideValueServiceProvider.cs
- TdsParserStateObject.cs
- ExtentJoinTreeNode.cs
- MissingSatelliteAssemblyException.cs
- XMLDiffLoader.cs
- DisplayNameAttribute.cs
- FastPropertyAccessor.cs
- BitmapEffectGeneralTransform.cs
- PartialCachingAttribute.cs
- ReadOnlyDictionary.cs
- ScriptControl.cs
- shaperfactory.cs
- MasterPageCodeDomTreeGenerator.cs
- CurrencyManager.cs
- DbConnectionPoolIdentity.cs
- RegexParser.cs
- Model3DGroup.cs
- UnionExpr.cs
- SiteMapNode.cs
- ErrorHandler.cs
- SharedStatics.cs
- DataTemplateKey.cs
- ConfigXmlSignificantWhitespace.cs
- Group.cs
- Enumerable.cs
- DateTimeConverter.cs
- SystemIcmpV4Statistics.cs
- PersonalizationProviderCollection.cs
- LinkedResource.cs
- PhysicalAddress.cs
- DesignerGenericWebPart.cs
- StylusPointPropertyId.cs
- EnumerableRowCollection.cs
- BitHelper.cs
- FilteredAttributeCollection.cs
- MinimizableAttributeTypeConverter.cs
- ObservableDictionary.cs
- ProcessDesigner.cs
- Cursor.cs
- ReturnValue.cs
- IdleTimeoutMonitor.cs
- UDPClient.cs
- RegexWriter.cs
- XmlSchemaDocumentation.cs
- AutoResizedEvent.cs
- AnnotationResource.cs
- CaseInsensitiveHashCodeProvider.cs
- UInt32Converter.cs
- SqlDataSourceView.cs
- Matrix3D.cs
- UnsafeNativeMethodsTablet.cs
- DataSourceCollectionBase.cs
- PolyLineSegment.cs
- HiddenField.cs
- DrawingAttributes.cs
- ViewStateException.cs
- RectAnimationUsingKeyFrames.cs
- StrokeIntersection.cs
- BindingCompleteEventArgs.cs
- ResourcesChangeInfo.cs
- ListControlDataBindingHandler.cs
- StorageTypeMapping.cs
- AdornerPresentationContext.cs
- BezierSegment.cs
- NativeMethods.cs
- infer.cs
- MetadataPropertyAttribute.cs
- ThreadPool.cs
- HttpCapabilitiesBase.cs
- WebPartCloseVerb.cs
- BatchParser.cs
- ResourceIDHelper.cs
- WebServiceData.cs
- _HeaderInfoTable.cs
- SelectionProviderWrapper.cs
- EmbeddedMailObject.cs
- EncryptedData.cs
- EncryptedReference.cs
- NullableLongAverageAggregationOperator.cs
- ConfigurationSchemaErrors.cs
- OAVariantLib.cs
- Empty.cs
- OverrideMode.cs
- QueryPageSettingsEventArgs.cs
- COAUTHIDENTITY.cs
- CreateCardRequest.cs
- SoapServerProtocol.cs
- FloaterParagraph.cs
- ChildrenQuery.cs
- MetadataHelper.cs
- TransactionTable.cs
- CodeArrayIndexerExpression.cs
- OutputCacheModule.cs
- ToolStripItemEventArgs.cs