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
- SponsorHelper.cs
- VolatileEnlistmentState.cs
- Crc32.cs
- ColumnHeader.cs
- RawStylusInputReport.cs
- XmlSchemaGroup.cs
- WindowsTitleBar.cs
- QueryCursorEventArgs.cs
- UserInitiatedNavigationPermission.cs
- BaseParagraph.cs
- TraceLog.cs
- NativeDirectoryServicesQueryAPIs.cs
- ReaderWriterLockSlim.cs
- _SingleItemRequestCache.cs
- SqlXml.cs
- Rules.cs
- NetDataContractSerializer.cs
- MembershipUser.cs
- CompModHelpers.cs
- LinearGradientBrush.cs
- FontInfo.cs
- MediaPlayer.cs
- activationcontext.cs
- SchemaImporterExtension.cs
- MarkupProperty.cs
- ContentElement.cs
- LinqDataSource.cs
- HasCopySemanticsAttribute.cs
- CapabilitiesUse.cs
- TileModeValidation.cs
- DirectionalLight.cs
- TraceHandlerErrorFormatter.cs
- ModifierKeysValueSerializer.cs
- MenuItemStyleCollectionEditor.cs
- DictionaryEntry.cs
- GcHandle.cs
- ClientRolePrincipal.cs
- WorkflowInlining.cs
- RSAPKCS1SignatureDeformatter.cs
- PieceDirectory.cs
- MouseGesture.cs
- NetworkInformationException.cs
- StringValueSerializer.cs
- ColumnCollectionEditor.cs
- Marshal.cs
- WorkflowFileItem.cs
- EntityDataSourceDesignerHelper.cs
- CellTreeSimplifier.cs
- cookiecontainer.cs
- SharedDp.cs
- Base64Stream.cs
- ProtocolsConfigurationHandler.cs
- DataBindingCollection.cs
- DataBinding.cs
- RepeaterDataBoundAdapter.cs
- FileRecordSequenceHelper.cs
- NativeMethods.cs
- FixedDocumentPaginator.cs
- Brush.cs
- ActiveDocumentEvent.cs
- DataControlFieldCollection.cs
- DataGridItemAutomationPeer.cs
- RelatedImageListAttribute.cs
- PublishLicense.cs
- TickBar.cs
- CheckBoxBaseAdapter.cs
- TableStyle.cs
- Point4DConverter.cs
- SoapAttributes.cs
- UdpDiscoveryMessageFilter.cs
- GlobalEventManager.cs
- DataBoundControlAdapter.cs
- MonthCalendar.cs
- RecordsAffectedEventArgs.cs
- COM2FontConverter.cs
- RegisteredArrayDeclaration.cs
- isolationinterop.cs
- FileBasedResourceGroveler.cs
- Oci.cs
- XPathAncestorIterator.cs
- FixedDocumentSequencePaginator.cs
- PanningMessageFilter.cs
- EntityKeyElement.cs
- HybridDictionary.cs
- DBPropSet.cs
- DotNetATv1WindowsLogEntryDeserializer.cs
- DataServiceQueryException.cs
- Vector3DAnimationUsingKeyFrames.cs
- MarkupProperty.cs
- DocobjHost.cs
- SqlBinder.cs
- DesignerActionPanel.cs
- UnsafeMethods.cs
- RankException.cs
- UrlPath.cs
- XmlNavigatorStack.cs
- MetafileHeader.cs
- BitmapImage.cs
- DecodeHelper.cs
- DbExpressionBuilder.cs