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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Span.cs
- MonthChangedEventArgs.cs
- LocatorGroup.cs
- PageSettings.cs
- ObfuscateAssemblyAttribute.cs
- DetailsViewCommandEventArgs.cs
- ClientBuildManagerCallback.cs
- TcpTransportBindingElement.cs
- StorageMappingItemCollection.cs
- ConnectionManagementElement.cs
- Model3D.cs
- Expressions.cs
- StaticFileHandler.cs
- TCPClient.cs
- BridgeDataRecord.cs
- SchemaAttDef.cs
- Control.cs
- MessageQueueKey.cs
- Brush.cs
- QilDataSource.cs
- AutoResetEvent.cs
- ResourcesBuildProvider.cs
- ParallelLoopState.cs
- PageCache.cs
- AlternateView.cs
- Int32CollectionConverter.cs
- AnnotationDocumentPaginator.cs
- ExtensibleClassFactory.cs
- DefinitionBase.cs
- ProgressBarRenderer.cs
- Int16AnimationUsingKeyFrames.cs
- PrintPreviewControl.cs
- ErrorFormatter.cs
- ArcSegment.cs
- BitmapEffectRenderDataResource.cs
- FixedMaxHeap.cs
- BaseTemplateParser.cs
- XmlTypeMapping.cs
- RunWorkerCompletedEventArgs.cs
- BufferBuilder.cs
- DependencyPropertyDescriptor.cs
- ResourcesBuildProvider.cs
- AuthenticationModuleElementCollection.cs
- SafeHandles.cs
- UserControl.cs
- UnlockCardRequest.cs
- LayeredChannelFactory.cs
- SelectionProviderWrapper.cs
- MaskedTextBoxTextEditor.cs
- RegistrationServices.cs
- MSAAWinEventWrap.cs
- CompiledXpathExpr.cs
- InputScope.cs
- UpdateProgress.cs
- TableParaClient.cs
- DataControlHelper.cs
- StringCollection.cs
- MostlySingletonList.cs
- ZipIOLocalFileDataDescriptor.cs
- SystemException.cs
- TextWriterEngine.cs
- InvokeGenerator.cs
- ShutDownListener.cs
- TransactionInformation.cs
- DeflateInput.cs
- BinaryExpressionHelper.cs
- ExpressionParser.cs
- AvTrace.cs
- LabelInfo.cs
- FixedSchema.cs
- Zone.cs
- RoutedEventHandlerInfo.cs
- TraceLevelStore.cs
- Stacktrace.cs
- MimeBasePart.cs
- StateWorkerRequest.cs
- ModelItemCollection.cs
- Root.cs
- RegexWriter.cs
- ResourceDescriptionAttribute.cs
- WeakEventTable.cs
- X509CertificateCollection.cs
- EventLogTraceListener.cs
- QilExpression.cs
- TypeSchema.cs
- VBIdentifierNameEditor.cs
- ReadOnlyObservableCollection.cs
- XPathExpr.cs
- XmlLanguageConverter.cs
- MemberHolder.cs
- SortKey.cs
- WebPartsSection.cs
- SerializationHelper.cs
- ReflectionServiceProvider.cs
- DictionarySectionHandler.cs
- EventArgs.cs
- OleDbSchemaGuid.cs
- HttpRequest.cs
- XPathMultyIterator.cs
- ResourcePropertyMemberCodeDomSerializer.cs