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
- UntrustedRecipientException.cs
- KeyValueConfigurationCollection.cs
- AssemblyInfo.cs
- DataBindingExpressionBuilder.cs
- MouseGesture.cs
- Compress.cs
- BinarySecretSecurityToken.cs
- ZipQueryOperator.cs
- TypeForwardedToAttribute.cs
- EntityDescriptor.cs
- PersistenceParticipant.cs
- OdbcEnvironmentHandle.cs
- PackWebRequestFactory.cs
- ArcSegment.cs
- ArrayWithOffset.cs
- ThumbAutomationPeer.cs
- EntityDesignerBuildProvider.cs
- TransformerConfigurationWizardBase.cs
- XPathScanner.cs
- SoapHttpTransportImporter.cs
- TypeGeneratedEventArgs.cs
- NetSectionGroup.cs
- BlobPersonalizationState.cs
- RtfNavigator.cs
- ProtectedUri.cs
- ProfileService.cs
- AuthenticationSection.cs
- SliderAutomationPeer.cs
- DataBoundControl.cs
- XmlNodeChangedEventArgs.cs
- MembershipSection.cs
- SafeCryptoHandles.cs
- BuildProvider.cs
- SliderAutomationPeer.cs
- Missing.cs
- NumberEdit.cs
- DataGridSortCommandEventArgs.cs
- PanelDesigner.cs
- PersonalizationEntry.cs
- Publisher.cs
- SqlBulkCopy.cs
- EtwTrace.cs
- ListSurrogate.cs
- QueryStatement.cs
- IRCollection.cs
- WindowsSlider.cs
- DocumentSchemaValidator.cs
- FontEmbeddingManager.cs
- ControlIdConverter.cs
- SpecialNameAttribute.cs
- FunctionQuery.cs
- PresentationAppDomainManager.cs
- HtmlTableCell.cs
- LinqDataSourceStatusEventArgs.cs
- SyntaxCheck.cs
- MSAAWinEventWrap.cs
- PageParserFilter.cs
- SortableBindingList.cs
- ImplicitInputBrush.cs
- TargetParameterCountException.cs
- ChannelHandler.cs
- ConfigurationStrings.cs
- Certificate.cs
- UriSection.cs
- _ListenerResponseStream.cs
- SmtpFailedRecipientsException.cs
- EntityContainerEmitter.cs
- XmlKeywords.cs
- AccessControlEntry.cs
- VideoDrawing.cs
- OutputScopeManager.cs
- ToolStripItemTextRenderEventArgs.cs
- CqlLexerHelpers.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- WebPartActionVerb.cs
- BufferBuilder.cs
- DispatchWrapper.cs
- GACIdentityPermission.cs
- DigestTraceRecordHelper.cs
- ExpressionLexer.cs
- MaterializeFromAtom.cs
- DataProviderNameConverter.cs
- SystemResourceKey.cs
- FrugalMap.cs
- TableCell.cs
- TraceHandlerErrorFormatter.cs
- _SecureChannel.cs
- TextTreeTextNode.cs
- TypeEnumerableViewSchema.cs
- PrintDialog.cs
- TableParaClient.cs
- EventHandlersDesigner.cs
- VisualStyleElement.cs
- PointAnimationBase.cs
- Expander.cs
- ColumnResult.cs
- ContentElement.cs
- DbCommandDefinition.cs
- ValidatorCompatibilityHelper.cs
- BooleanFunctions.cs