Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Activities / System / ServiceModel / Activities / SendMessageChannelCache.cs / 1305376 / SendMessageChannelCache.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Activities { using System; using System.Collections.Generic; using System.Runtime; using System.Runtime.Collections; public sealed class SendMessageChannelCache : IDisposable, ICancelable { static FuncdefaultExtensionProvider = new Func (CreateDefaultExtension); ChannelCacheSettings channelCacheSettings; ChannelCacheSettings factoryCacheSettings; bool isReadOnly; bool allowUnsafeCaching; bool isDisposed; ObjectCache factoryCache; object thisLock; public SendMessageChannelCache() : this(null, null, ChannelCacheDefaults.DefaultAllowUnsafeSharing) { } public SendMessageChannelCache(ChannelCacheSettings factorySettings, ChannelCacheSettings channelSettings) : this(factorySettings, channelSettings, ChannelCacheDefaults.DefaultAllowUnsafeSharing) { } // use the default settings if null is specified for FactoryCacheSettings or ChannelCacheSettings public SendMessageChannelCache(ChannelCacheSettings factorySettings, ChannelCacheSettings channelSettings, bool allowUnsafeCaching) { this.allowUnsafeCaching = allowUnsafeCaching; this.FactorySettings = factorySettings; this.ChannelSettings = channelSettings; this.thisLock = new Object(); } internal static Func DefaultExtensionProvider { get { return defaultExtensionProvider; } } public bool AllowUnsafeCaching { get { return this.allowUnsafeCaching; } set { ThrowIfReadOnly(); this.allowUnsafeCaching = value; } } public ChannelCacheSettings ChannelSettings { get { return this.channelCacheSettings; } set { ThrowIfReadOnly(); if (value == null) { this.channelCacheSettings = new ChannelCacheSettings { LeaseTimeout = ChannelCacheDefaults.DefaultChannelLeaseTimeout }; } else { this.channelCacheSettings = value; } } } public ChannelCacheSettings FactorySettings { get { return this.factoryCacheSettings; } set { ThrowIfReadOnly(); if (value == null) { this.factoryCacheSettings = new ChannelCacheSettings { LeaseTimeout = ChannelCacheDefaults.DefaultFactoryLeaseTimeout }; } else { this.factoryCacheSettings = value; } } } static SendMessageChannelCache CreateDefaultExtension() { SendMessageChannelCache defaultExtension = new SendMessageChannelCache(); defaultExtension.FactorySettings.LeaseTimeout = ChannelCacheDefaults.DefaultFactoryLeaseTimeout; defaultExtension.ChannelSettings.LeaseTimeout = ChannelCacheDefaults.DefaultChannelLeaseTimeout; return defaultExtension; } // factory cache will be created on first usage after which the settings are immutable internal ObjectCache GetFactoryCache() { if (this.factoryCache == null) { this.isReadOnly = true; lock (thisLock) { ThrowIfDisposed(); if (this.factoryCache == null) { // we don't need to set DisposeItemCallback since InternalSendMessage.ChannelFactoryReference is IDisposable ObjectCacheSettings objectCacheSettings = new ObjectCacheSettings { CacheLimit = this.FactorySettings.MaxItemsInCache, IdleTimeout = this.FactorySettings.IdleTimeout, LeaseTimeout = this.FactorySettings.LeaseTimeout }; this.factoryCache = new ObjectCache (objectCacheSettings); } } } return this.factoryCache; } void ThrowIfReadOnly() { if (this.isReadOnly) { // cache has already been created, settings cannot be changed now throw FxTrace.Exception.AsError(new InvalidOperationException(SR.CacheSettingsLocked)); } } public void Dispose() { // Close the ChannelFactory and the Channels // SendMessageChannelCache cannot be used after Dispose is called if (!this.isDisposed) { lock (thisLock) { if (!this.isDisposed) { if (this.factoryCache != null) { this.factoryCache.Dispose(); } this.isDisposed = true; } } } } void ICancelable.Cancel() { Dispose(); } void ThrowIfDisposed() { if (this.isDisposed == true) { throw FxTrace.Exception.AsError(new ObjectDisposedException(typeof(SendMessageChannelCache).ToString())); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TrustLevelCollection.cs
- WeakReferenceEnumerator.cs
- NullRuntimeConfig.cs
- BamlTreeMap.cs
- PageVisual.cs
- ProfileManager.cs
- TraceLevelHelper.cs
- ColorBuilder.cs
- IndexedDataBuffer.cs
- Point3DAnimationBase.cs
- ProcessThread.cs
- CursorConverter.cs
- EnvelopedSignatureTransform.cs
- RecognizedAudio.cs
- SchemaEntity.cs
- AuthStoreRoleProvider.cs
- DBDataPermissionAttribute.cs
- mactripleDES.cs
- ToolZone.cs
- CheckBoxField.cs
- AppLevelCompilationSectionCache.cs
- ContainerUtilities.cs
- BmpBitmapDecoder.cs
- DetailsViewCommandEventArgs.cs
- IgnoreSectionHandler.cs
- InlineUIContainer.cs
- FontWeights.cs
- WinEventWrap.cs
- XLinq.cs
- WebBrowserBase.cs
- BehaviorEditorPart.cs
- ExpressionContext.cs
- SetStoryboardSpeedRatio.cs
- EncryptedXml.cs
- TextEditorThreadLocalStore.cs
- JsonGlobals.cs
- EpmSourceTree.cs
- MetadataSerializer.cs
- TextRangeProviderWrapper.cs
- AudioLevelUpdatedEventArgs.cs
- HybridDictionary.cs
- InputLangChangeRequestEvent.cs
- AssemblyBuilderData.cs
- PathFigureCollection.cs
- ComplexTypeEmitter.cs
- EntityReference.cs
- XmlComment.cs
- SyndicationElementExtensionCollection.cs
- EntityDataSourceWrapperCollection.cs
- XmlReflectionImporter.cs
- EventListener.cs
- DesignerProperties.cs
- InkCanvasSelectionAdorner.cs
- InvalidComObjectException.cs
- HttpRuntimeSection.cs
- AttachInfo.cs
- XmlDictionaryReaderQuotasElement.cs
- TransformConverter.cs
- GPPOINT.cs
- ComplexObject.cs
- IndentedWriter.cs
- CryptoKeySecurity.cs
- FontCacheUtil.cs
- UnknownMessageReceivedEventArgs.cs
- HierarchicalDataSourceControl.cs
- TransactionChannelListener.cs
- SchemaTableOptionalColumn.cs
- RowType.cs
- QilDataSource.cs
- NavigationProperty.cs
- EntityDataSourceWizardForm.cs
- precedingquery.cs
- RijndaelCryptoServiceProvider.cs
- FontTypeConverter.cs
- CancellableEnumerable.cs
- transactioncontext.cs
- XmlNamespaceMappingCollection.cs
- TextRangeAdaptor.cs
- RNGCryptoServiceProvider.cs
- SessionState.cs
- PrinterResolution.cs
- latinshape.cs
- GPPOINT.cs
- PointHitTestResult.cs
- TypeSystemHelpers.cs
- ReadOnlyTernaryTree.cs
- input.cs
- ToolStripGripRenderEventArgs.cs
- SqlRecordBuffer.cs
- UrlRoutingHandler.cs
- DurableMessageDispatchInspector.cs
- base64Transforms.cs
- ConfigurationLockCollection.cs
- LoginName.cs
- VersionPair.cs
- ToolStripMenuItem.cs
- HitTestDrawingContextWalker.cs
- MimeMapping.cs
- PasswordPropertyTextAttribute.cs
- Trigger.cs