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
- RequestResizeEvent.cs
- LambdaCompiler.cs
- LocalsItemDescription.cs
- MsmqIntegrationBindingElement.cs
- ConfigurationSectionGroup.cs
- UnsafeNativeMethodsCLR.cs
- UriExt.cs
- SelectManyQueryOperator.cs
- HttpHeaderCollection.cs
- CheckoutException.cs
- NotificationContext.cs
- TdsRecordBufferSetter.cs
- Rectangle.cs
- CalendarDesigner.cs
- TemplateXamlTreeBuilder.cs
- StructuralType.cs
- ResourceKey.cs
- SimpleBitVector32.cs
- AddInContractAttribute.cs
- EntityDataSourceColumn.cs
- ConfigurationLockCollection.cs
- DoubleSumAggregationOperator.cs
- XmlDataLoader.cs
- HttpResponseInternalWrapper.cs
- EpmContentDeSerializer.cs
- FaultConverter.cs
- CommandID.cs
- WebPartsPersonalizationAuthorization.cs
- Number.cs
- Shape.cs
- SoapAttributeAttribute.cs
- Enum.cs
- ExpressionLexer.cs
- RadioButtonList.cs
- Signature.cs
- CollectionChangeEventArgs.cs
- DesignerSerializationOptionsAttribute.cs
- OdbcConnectionOpen.cs
- ActionFrame.cs
- Expressions.cs
- ExpressionNormalizer.cs
- validationstate.cs
- NetworkCredential.cs
- XsltSettings.cs
- CodeTypeConstructor.cs
- IApplicationTrustManager.cs
- HtmlFormParameterWriter.cs
- ResolveNameEventArgs.cs
- RecognizedWordUnit.cs
- EntityContainer.cs
- FileChangesMonitor.cs
- FamilyMap.cs
- Lasso.cs
- ZipIOCentralDirectoryBlock.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- UpdatePanelTriggerCollection.cs
- DictionarySectionHandler.cs
- PropertyGeneratedEventArgs.cs
- IMembershipProvider.cs
- GACMembershipCondition.cs
- ButtonFlatAdapter.cs
- ListViewGroupItemCollection.cs
- RoleServiceManager.cs
- DelegateSerializationHolder.cs
- DropSource.cs
- PreservationFileWriter.cs
- ResXResourceSet.cs
- MSAAWinEventWrap.cs
- Animatable.cs
- PngBitmapEncoder.cs
- TreeNodeBindingDepthConverter.cs
- ImageIndexConverter.cs
- IIS7WorkerRequest.cs
- WebControl.cs
- UserControlFileEditor.cs
- EDesignUtil.cs
- MoveSizeWinEventHandler.cs
- XmlSchemaChoice.cs
- RectangleConverter.cs
- ResourcePool.cs
- Grant.cs
- EtwTrace.cs
- Point4D.cs
- LogSwitch.cs
- AppDomainManager.cs
- EntityTransaction.cs
- FixedSOMImage.cs
- MD5CryptoServiceProvider.cs
- InstanceOwnerQueryResult.cs
- _LazyAsyncResult.cs
- StrokeSerializer.cs
- IgnoreSection.cs
- EndpointDiscoveryMetadataCD1.cs
- ZipIORawDataFileBlock.cs
- FileDialog.cs
- PresentationAppDomainManager.cs
- UnaryNode.cs
- SizeAnimation.cs
- JavaScriptObjectDeserializer.cs
- DescendantOverDescendantQuery.cs