Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / TransactionBridge / Microsoft / Transactions / Wsat / Protocol / LookupTables.cs / 1 / LookupTables.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- // This file contains all transaction and enlistment lookup tables for WS-AT using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using Microsoft.Transactions.Bridge; using Microsoft.Transactions.Wsat.Messaging; namespace Microsoft.Transactions.Wsat.Protocol { class LookupTables { ProtocolState state; ReaderWriterLock transactionLock = new ReaderWriterLock(); ReaderWriterLock enlistmentLock = new ReaderWriterLock(); Dictionaryenlistments = new Dictionary (); Dictionary transactions = new Dictionary (); public LookupTables(ProtocolState state) { this.state = state; } // // Enlistments // public TransactionEnlistment FindEnlistment(Guid enlistmentId) { return Find (this.enlistments, this.enlistmentLock, enlistmentId); } public void AddEnlistment(TransactionEnlistment enlistment) { Add (this.enlistments, this.enlistmentLock, enlistment.EnlistmentId, enlistment); } public void RemoveEnlistment(TransactionEnlistment enlistment) { Remove (this.enlistments, this.enlistmentLock, enlistment.EnlistmentId, enlistment); } // // Transaction contexts // public TransactionContextManager FindTransactionContextManager(string contextId) { return Find (this.transactions, this.transactionLock, contextId); } public void AddTransactionContextManager(TransactionContextManager contextManager) { Add (this.transactions, this.transactionLock, contextManager.Identifier, contextManager); } public TransactionContextManager FindOrAddTransactionContextManager(TransactionContextManager contextManager, out bool found) { return FindOrAdd (this.transactions, this.transactionLock, contextManager.Identifier, contextManager, out found); } public void RemoveTransactionContextManager(TransactionContextManager contextManager) { Remove (this.transactions, this.transactionLock, contextManager.Identifier, contextManager); } // // Internal // void Add (Dictionary dictionary, ReaderWriterLock rwLock, T key, S value) { bool lockHeld = false; try { try { } finally { rwLock.AcquireWriterLock(Timeout.Infinite); lockHeld = true; } dictionary.Add(key, value); } finally { if (lockHeld) { rwLock.ReleaseWriterLock(); } } if (DebugTrace.Verbose) { int count = dictionary.Count; DebugTrace.Trace(TraceLevel.Verbose, "Added {0} {1} to lookup table. Table contains {2} object{3}", value.GetType().Name, value, count, count == 1 ? string.Empty : "s"); } } void Remove (Dictionary dictionary, ReaderWriterLock rwLock, T key, S value) { bool lockHeld = false; try { try { } finally { rwLock.AcquireWriterLock(Timeout.Infinite); lockHeld = true; } #if DEBUG S existing; if (dictionary.TryGetValue(key, out existing) && !ReferenceEquals(value, existing)) { // If the value exists but isn't the same value as the item passed in, // we have a bug. Reason: an assumption in the code is violated. DiagnosticUtility.DebugAssert("The lookup table contains a different object"); } #endif bool removed = dictionary.Remove(key); if (!(removed)) { // If the value doesn't exist in the dictionary, // we have a bug. Reason: an assumption in the code is violated. DiagnosticUtility.FailFast("The lookup table does not contain the object"); } } finally { if (lockHeld) { rwLock.ReleaseWriterLock(); } } if (DebugTrace.Verbose) { int count = dictionary.Count; DebugTrace.Trace(TraceLevel.Verbose, "Removed {0} {1} from lookup table. Table contains {2} object{3}", value.GetType().Name, value, count, count == 1 ? string.Empty : "s"); } } S Find (Dictionary dictionary, ReaderWriterLock rwLock, T key) where S : class { S value; bool lockHeld = false; try { try { } finally { rwLock.AcquireReaderLock(Timeout.Infinite); lockHeld = true; } if (!dictionary.TryGetValue(key, out value)) { value = null; } } finally { if (lockHeld) { rwLock.ReleaseReaderLock(); } } return value; } S FindOrAdd (Dictionary dictionary, ReaderWriterLock rwLock, T key, S value, out bool found) { S inserted; bool lockHeld = false; try { try { } finally { rwLock.AcquireWriterLock(Timeout.Infinite); lockHeld = true; } found = dictionary.TryGetValue(key, out inserted); if (!found) { dictionary.Add(key, value); inserted = value; } } finally { if (lockHeld) { rwLock.ReleaseWriterLock(); } } if (DebugTrace.Verbose && !found) { int count = dictionary.Count; DebugTrace.Trace(TraceLevel.Verbose, "Added {0} {1} to lookup table. Table contains {2} object{3}", value.GetType().Name, value, count, count == 1 ? string.Empty : "s"); } return inserted; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AutomationEvent.cs
- InvalidEnumArgumentException.cs
- OdbcConnectionString.cs
- LineSegment.cs
- GenericEnumerator.cs
- DataGridHyperlinkColumn.cs
- SafeNativeMethods.cs
- CompilerResults.cs
- EntityDataSourceSelectedEventArgs.cs
- Authorization.cs
- ProbeRequestResponseAsyncResult.cs
- ConfigXmlReader.cs
- FigureHelper.cs
- DictionaryGlobals.cs
- AdornerDecorator.cs
- FileChangesMonitor.cs
- CatalogPartChrome.cs
- XmlSchemaCompilationSettings.cs
- GridViewDeleteEventArgs.cs
- HttpConfigurationContext.cs
- RewritingValidator.cs
- StorageEntityTypeMapping.cs
- RightNameExpirationInfoPair.cs
- PropertyPushdownHelper.cs
- ContainerVisual.cs
- ResourceAssociationSetEnd.cs
- TransportOutputChannel.cs
- WindowsGraphics.cs
- CallbackValidatorAttribute.cs
- AuthenticationConfig.cs
- ValidatorCompatibilityHelper.cs
- Rect3D.cs
- DataListItemEventArgs.cs
- EncodingTable.cs
- OrderablePartitioner.cs
- TCEAdapterGenerator.cs
- ByeMessage11.cs
- PreviewPrintController.cs
- WebPartEditorOkVerb.cs
- BuilderPropertyEntry.cs
- LogLogRecord.cs
- CapabilitiesUse.cs
- SiteMembershipCondition.cs
- SurrogateSelector.cs
- Context.cs
- StyleHelper.cs
- ColumnMapTranslator.cs
- HtmlTableRow.cs
- WrappedIUnknown.cs
- ToolStripProgressBar.cs
- OraclePermission.cs
- Util.cs
- ADRoleFactory.cs
- InvokeBinder.cs
- OrderPreservingPipeliningSpoolingTask.cs
- SmtpAuthenticationManager.cs
- XmlAtomicValue.cs
- ScrollItemProviderWrapper.cs
- Fx.cs
- ArrowControl.xaml.cs
- RectAnimationClockResource.cs
- WindowsAuthenticationEventArgs.cs
- WebPartConnectionsConnectVerb.cs
- FunctionImportMapping.cs
- X509ThumbprintKeyIdentifierClause.cs
- OleTxTransaction.cs
- DataViewManager.cs
- BaseCollection.cs
- SQLBytesStorage.cs
- VersionedStreamOwner.cs
- NativeMethods.cs
- PhysicalOps.cs
- AdjustableArrowCap.cs
- BindUriHelper.cs
- UserNameSecurityTokenProvider.cs
- ToolStripSystemRenderer.cs
- HMAC.cs
- DbConnectionPool.cs
- WmfPlaceableFileHeader.cs
- TCPListener.cs
- Package.cs
- TriggerBase.cs
- UserNameSecurityTokenProvider.cs
- NativeMethods.cs
- M3DUtil.cs
- Exception.cs
- BackStopAuthenticationModule.cs
- RotateTransform3D.cs
- SplitContainer.cs
- DispatcherProcessingDisabled.cs
- TypedCompletedAsyncResult.cs
- XPathNodeIterator.cs
- Signature.cs
- EncryptedKey.cs
- CheckBoxPopupAdapter.cs
- ListView.cs
- DbTransaction.cs
- DefaultPropertyAttribute.cs
- NetStream.cs
- TraceHelpers.cs