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
- MethodImplAttribute.cs
- Transform3DCollection.cs
- DecoratedNameAttribute.cs
- Application.cs
- EmptyEnumerable.cs
- SimpleWorkerRequest.cs
- SimpleApplicationHost.cs
- Comparer.cs
- SvcMapFileLoader.cs
- SchemaElementLookUpTableEnumerator.cs
- WebPartMenu.cs
- DeflateStream.cs
- ClientTarget.cs
- XamlFilter.cs
- WorkflowInstanceExtensionProvider.cs
- StylusButton.cs
- DifferencingCollection.cs
- HostVisual.cs
- AuthenticationModuleElementCollection.cs
- ContextItem.cs
- FormViewInsertEventArgs.cs
- Relationship.cs
- MonitorWrapper.cs
- MappedMetaModel.cs
- DataGridViewAdvancedBorderStyle.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- DataTableTypeConverter.cs
- WhitespaceSignificantCollectionAttribute.cs
- ImagingCache.cs
- SqlDataSource.cs
- CurrencyWrapper.cs
- _ConnectOverlappedAsyncResult.cs
- UInt16Converter.cs
- BufferBuilder.cs
- WebPartEventArgs.cs
- PowerModeChangedEventArgs.cs
- MaskedTextBoxDesigner.cs
- NativeMethods.cs
- GlyphTypeface.cs
- ParameterEditorUserControl.cs
- NamespaceListProperty.cs
- selecteditemcollection.cs
- DigitalSignatureProvider.cs
- ExcCanonicalXml.cs
- ProgressChangedEventArgs.cs
- SqlCacheDependencyDatabaseCollection.cs
- TextTreeTextElementNode.cs
- oledbmetadatacolumnnames.cs
- TypeCodeDomSerializer.cs
- ItemContainerProviderWrapper.cs
- MetadataSerializer.cs
- PrivilegeNotHeldException.cs
- QuadTree.cs
- ChannelManager.cs
- EmptyQuery.cs
- IChannel.cs
- ConstructorNeedsTagAttribute.cs
- DependencyObject.cs
- SystemWebExtensionsSectionGroup.cs
- LinqDataSource.cs
- Double.cs
- DataReceivedEventArgs.cs
- RuntimeCompatibilityAttribute.cs
- EvidenceBase.cs
- HtmlTableRow.cs
- AnonymousIdentificationSection.cs
- DocumentsTrace.cs
- Char.cs
- GridSplitterAutomationPeer.cs
- XmlSchemaSimpleContent.cs
- ConsumerConnectionPoint.cs
- TraceHwndHost.cs
- DbParameterCollectionHelper.cs
- SystemInformation.cs
- Vector3DCollectionConverter.cs
- StreamGeometryContext.cs
- ToolStripContentPanelRenderEventArgs.cs
- TableLayoutCellPaintEventArgs.cs
- TypeForwardedToAttribute.cs
- XmlSchemaSimpleType.cs
- Misc.cs
- CustomAssemblyResolver.cs
- NativeMethods.cs
- DriveInfo.cs
- StylusPointPropertyInfo.cs
- DynamicActivityXamlReader.cs
- GreaterThanOrEqual.cs
- ValueConversionAttribute.cs
- UIElementCollection.cs
- WindowsAuthenticationModule.cs
- DiagnosticsConfiguration.cs
- DataGridDetailsPresenter.cs
- Activity.cs
- RegisteredDisposeScript.cs
- autovalidator.cs
- XsltSettings.cs
- BuildDependencySet.cs
- XmlSchemaSimpleType.cs
- MdiWindowListItemConverter.cs
- Region.cs