Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Transactions / TransactionCache.cs / 1 / TransactionCache.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Transactions { using System; using System.Collections.Generic; using System.Diagnostics; using System.ServiceModel; using System.ServiceModel.Channels; using System.ServiceModel.Security; using System.Threading; using System.Transactions; using System.Xml; //----------------------------------------------------------------------------------------- // Transaction caches //----------------------------------------------------------------------------------------- class WsatExtendedInformationCache : TransactionCache{ public static void Cache(Transaction tx, WsatExtendedInformation info) { WsatExtendedInformationCache entry = new WsatExtendedInformationCache(); entry.AddEntry(tx, tx, info); } } class WsatIncomingTransactionCache : TransactionCache { public static void Cache(string identifier, Transaction tx) { WsatIncomingTransactionCache entry = new WsatIncomingTransactionCache(); entry.AddEntry(tx, identifier, tx); } } abstract class TransactionCache { static Dictionary cache = new Dictionary (); static ReaderWriterLock cacheLock = new ReaderWriterLock(); T key; protected void AddEntry(Transaction transaction, T key, S value) { this.key = key; if (Add(key, value)) { transaction.TransactionCompleted += new TransactionCompletedEventHandler(OnTransactionCompleted); } } void OnTransactionCompleted(object sender, TransactionEventArgs e) { Remove(this.key); } static bool Add(T key, S value) { bool lockHeld = false; try { try { } finally { cacheLock.AcquireWriterLock(Timeout.Infinite); lockHeld = true; } if (!cache.ContainsKey(key)) { cache.Add(key, value); return true; } } finally { if (lockHeld) { cacheLock.ReleaseWriterLock(); } } return false; } static void Remove(T key) { bool lockHeld = false; try { try { } finally { cacheLock.AcquireWriterLock(Timeout.Infinite); lockHeld = true; } bool remove = cache.Remove(key); if (!(remove)) { // tx processing requires failfast when state is inconsistent DiagnosticUtility.FailFast("TransactionCache: key must be present in transaction cache"); } } finally { if (lockHeld) { cacheLock.ReleaseWriterLock(); } } } public static bool Find(T key, out S value) { bool lockHeld = false; try { try { } finally { cacheLock.AcquireReaderLock(Timeout.Infinite); lockHeld = true; } if (cache.TryGetValue(key, out value)) { return true; } } finally { if (lockHeld) { cacheLock.ReleaseReaderLock(); } } return false; } } } // 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
- StorageBasedPackageProperties.cs
- SerializationSectionGroup.cs
- DependencySource.cs
- BaseInfoTable.cs
- ImplicitInputBrush.cs
- TrackingParameters.cs
- ColumnReorderedEventArgs.cs
- UserThread.cs
- InstalledVoice.cs
- SimpleHandlerBuildProvider.cs
- FtpWebRequest.cs
- MultipleViewPattern.cs
- Soap11ServerProtocol.cs
- URLMembershipCondition.cs
- DesignerActionTextItem.cs
- XamlBrushSerializer.cs
- LineVisual.cs
- AssemblyInfo.cs
- TransformerTypeCollection.cs
- ControlEvent.cs
- WsatConfiguration.cs
- FlowDocumentReaderAutomationPeer.cs
- HtmlControlPersistable.cs
- InstanceStoreQueryResult.cs
- EntityType.cs
- DataGridViewCellParsingEventArgs.cs
- Version.cs
- TraceSource.cs
- _BasicClient.cs
- StylusCollection.cs
- SafeHandles.cs
- Exceptions.cs
- SecureStringHasher.cs
- GlobalizationAssembly.cs
- MarshalByValueComponent.cs
- SequentialUshortCollection.cs
- ServiceHostingEnvironment.cs
- DispatcherHookEventArgs.cs
- NotSupportedException.cs
- UpdateCommand.cs
- DirectoryNotFoundException.cs
- DefaultShape.cs
- ApplicationException.cs
- CodeSubDirectoriesCollection.cs
- ComponentTray.cs
- TouchFrameEventArgs.cs
- DataSourceCacheDurationConverter.cs
- _Events.cs
- PublishLicense.cs
- MultiPageTextView.cs
- CodeStatement.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- DBCommandBuilder.cs
- DynamicRenderer.cs
- HostSecurityManager.cs
- EntityViewContainer.cs
- ColorBlend.cs
- SerialPinChanges.cs
- TreeChangeInfo.cs
- HierarchicalDataSourceDesigner.cs
- MetabaseServerConfig.cs
- CharKeyFrameCollection.cs
- CommandField.cs
- PassportAuthenticationModule.cs
- TempFiles.cs
- CreateInstanceBinder.cs
- ApplicationTrust.cs
- PermissionToken.cs
- AuthStoreRoleProvider.cs
- PropertyPathWorker.cs
- SafeNativeMethods.cs
- PenThreadWorker.cs
- Invariant.cs
- TraceSection.cs
- Constraint.cs
- AQNBuilder.cs
- Quad.cs
- ByteStack.cs
- LayoutEngine.cs
- SizeValueSerializer.cs
- PositiveTimeSpanValidatorAttribute.cs
- _NegoStream.cs
- PrintEvent.cs
- HighlightComponent.cs
- Cursors.cs
- _NtlmClient.cs
- PageThemeBuildProvider.cs
- ImageSource.cs
- Image.cs
- ToolStripItemCollection.cs
- ConnectionManager.cs
- DataGridBoolColumn.cs
- Command.cs
- CellLabel.cs
- ResourceDisplayNameAttribute.cs
- ImplicitInputBrush.cs
- XmlProcessingInstruction.cs
- KeyPullup.cs
- DataSetMappper.cs
- OdbcPermission.cs