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
- WS2007HttpBindingCollectionElement.cs
- _Connection.cs
- TrackingAnnotationCollection.cs
- SafeNativeMethods.cs
- ObfuscationAttribute.cs
- ExpressionParser.cs
- XXXInfos.cs
- CollectionType.cs
- XmlSchemaSimpleTypeUnion.cs
- Utilities.cs
- NavigationWindow.cs
- SiteMapDataSource.cs
- xmlfixedPageInfo.cs
- XmlSchemaSimpleTypeList.cs
- StrongNameIdentityPermission.cs
- XmlDataProvider.cs
- SqlUserDefinedTypeAttribute.cs
- FlagsAttribute.cs
- DetailsViewDeleteEventArgs.cs
- PreviewPrintController.cs
- AsymmetricKeyExchangeFormatter.cs
- SqlRowUpdatingEvent.cs
- AggregationMinMaxHelpers.cs
- SchemaCollectionPreprocessor.cs
- PageFunction.cs
- PreservationFileReader.cs
- TextSpanModifier.cs
- ProxyWebPartManagerDesigner.cs
- SemaphoreSecurity.cs
- XmlSchemaParticle.cs
- SetMemberBinder.cs
- XmlEncoding.cs
- PanelContainerDesigner.cs
- DbConnectionPoolCounters.cs
- HwndTarget.cs
- ErrorReporting.cs
- InkPresenter.cs
- ContainerFilterService.cs
- QilInvokeEarlyBound.cs
- StrongNameMembershipCondition.cs
- DataBoundControlHelper.cs
- BrowserCapabilitiesFactory.cs
- RoleProviderPrincipal.cs
- CorrelationKeyCalculator.cs
- ByteAnimation.cs
- AxWrapperGen.cs
- HwndSourceKeyboardInputSite.cs
- MappingException.cs
- ScriptResourceHandler.cs
- XmlObjectSerializerWriteContextComplex.cs
- ColorTransform.cs
- WindowAutomationPeer.cs
- DynamicDataRouteHandler.cs
- GeneratedContractType.cs
- StandardRuntimeEnumValidator.cs
- MemberHolder.cs
- Faults.cs
- ADConnectionHelper.cs
- ApplicationServiceHelper.cs
- PhonemeConverter.cs
- NestPullup.cs
- BindingSource.cs
- CompilerGeneratedAttribute.cs
- Propagator.Evaluator.cs
- TraceListener.cs
- ConditionalAttribute.cs
- UrlMapping.cs
- RawStylusInput.cs
- AppDomainGrammarProxy.cs
- LayoutEvent.cs
- UriTemplatePathPartiallyEquivalentSet.cs
- ScriptManager.cs
- PropertyInformationCollection.cs
- TextTreePropertyUndoUnit.cs
- LightweightEntityWrapper.cs
- GenerateTemporaryAssemblyTask.cs
- WebPartDisplayModeCancelEventArgs.cs
- StructuredCompositeActivityDesigner.cs
- DBPropSet.cs
- MetadataArtifactLoader.cs
- CompiledQuery.cs
- autovalidator.cs
- ReferenceCountedObject.cs
- SizeConverter.cs
- ExtendedPropertyDescriptor.cs
- OracleTimeSpan.cs
- DefaultSettingsSection.cs
- ClassHandlersStore.cs
- SuppressMergeCheckAttribute.cs
- ConnectionManagementElementCollection.cs
- BamlResourceSerializer.cs
- AccessedThroughPropertyAttribute.cs
- HttpRuntimeSection.cs
- XslTransform.cs
- ProcessHostConfigUtils.cs
- OpenFileDialog.cs
- SqlWorkflowPersistenceService.cs
- Route.cs
- AstTree.cs
- ViewEventArgs.cs