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
- DefaultValueConverter.cs
- XmlSchemaInfo.cs
- WindowsTokenRoleProvider.cs
- AsyncResult.cs
- SqlFacetAttribute.cs
- DataServiceContext.cs
- FileDialog.cs
- DataGridTextColumn.cs
- AsymmetricKeyExchangeFormatter.cs
- EnumValidator.cs
- behaviorssection.cs
- BuildResult.cs
- DataControlFieldTypeEditor.cs
- DesignerLoader.cs
- NumericUpDownAccelerationCollection.cs
- BindingsCollection.cs
- ProtocolsConfiguration.cs
- ZoneIdentityPermission.cs
- DesignerTransaction.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- EdmSchemaError.cs
- HtmlTableRowCollection.cs
- PermissionListSet.cs
- IncrementalHitTester.cs
- Parsers.cs
- IriParsingElement.cs
- SiteMapHierarchicalDataSourceView.cs
- CloudCollection.cs
- BufferModeSettings.cs
- SecureEnvironment.cs
- CodeDOMUtility.cs
- TreeNodeCollectionEditorDialog.cs
- SQLSingle.cs
- MediaPlayerState.cs
- BackStopAuthenticationModule.cs
- WSDualHttpBindingCollectionElement.cs
- GenerateScriptTypeAttribute.cs
- StickyNoteHelper.cs
- DataControlHelper.cs
- PointUtil.cs
- AbsoluteQuery.cs
- ReferentialConstraint.cs
- Constraint.cs
- CodeTypeMemberCollection.cs
- TcpTransportElement.cs
- CommunicationException.cs
- SRGSCompiler.cs
- BigInt.cs
- FieldMetadata.cs
- NamespaceInfo.cs
- KeyFrames.cs
- WindowHelperService.cs
- DesignTimeType.cs
- XamlTreeBuilderBamlRecordWriter.cs
- BufferedReadStream.cs
- SchemaAttDef.cs
- OdbcEnvironmentHandle.cs
- HttpCachePolicy.cs
- MergeFailedEvent.cs
- EvidenceTypeDescriptor.cs
- DataContext.cs
- XsdBuildProvider.cs
- UndoManager.cs
- Context.cs
- ExpressionParser.cs
- FaultHandlingFilter.cs
- MultiAsyncResult.cs
- EngineSite.cs
- RtfControlWordInfo.cs
- ConfigurationElement.cs
- configsystem.cs
- OrderedDictionary.cs
- Run.cs
- ClientBuildManagerCallback.cs
- Roles.cs
- StringExpressionSet.cs
- ZipIOLocalFileDataDescriptor.cs
- ApplicationDirectoryMembershipCondition.cs
- DataBindingHandlerAttribute.cs
- SingleKeyFrameCollection.cs
- SqlConnection.cs
- MenuTracker.cs
- WsatExtendedInformation.cs
- RuleRefElement.cs
- AsyncResult.cs
- DeviceSpecificChoiceCollection.cs
- WithParamAction.cs
- ServicePointManager.cs
- CodeCommentStatement.cs
- SqlInternalConnectionTds.cs
- BitStack.cs
- NullEntityWrapper.cs
- invalidudtexception.cs
- NameValueConfigurationCollection.cs
- JavaScriptString.cs
- TemplateNameScope.cs
- SqlDataSourceStatusEventArgs.cs
- WindowClosedEventArgs.cs
- HtmlTable.cs
- formatstringdialog.cs