Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / CommunicationObjectManager.cs / 1 / CommunicationObjectManager.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Diagnostics; using System.ServiceModel; using System.Collections.Generic; using System.Collections; internal class CommunicationObjectManager: LifetimeManager where ItemType : class, ICommunicationObject { bool inputClosed; Hashtable table; public CommunicationObjectManager(object mutex) : base(mutex) { this.table = new Hashtable(); } public void Add(ItemType item) { bool added = false; lock (this.ThisLock) { if (this.State == LifetimeState.Opened && !this.inputClosed) { if (this.table.ContainsKey(item)) return; this.table.Add(item, item); base.IncrementBusyCountWithoutLock(); item.Closed += this.OnItemClosed; added = true; } } if (!added) { item.Abort(); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ObjectDisposedException(this.GetType().ToString())); } } public void CloseInput() { //Abort can reenter this call as a result of //close timeout, Closing input twice is not a //FailFast case. this.inputClosed = true; } public void DecrementActivityCount() { this.DecrementBusyCount(); } public void IncrementActivityCount() { this.IncrementBusyCount(); } void OnItemClosed(object sender, EventArgs args) { this.Remove((ItemType)sender); } public void Remove(ItemType item) { lock (this.ThisLock) { if (!this.table.ContainsKey(item)) return; this.table.Remove(item); } item.Closed -= this.OnItemClosed; base.DecrementBusyCount(); } public ItemType[] ToArray() { lock (this.ThisLock) { int index = 0; ItemType[] items = new ItemType[this.table.Keys.Count]; foreach(ItemType item in this.table.Keys) items[index++] = item; return items; } } } } // 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
- _OverlappedAsyncResult.cs
- MiniModule.cs
- CriticalExceptions.cs
- TrustManagerMoreInformation.cs
- SimpleMailWebEventProvider.cs
- DesignerCommandAdapter.cs
- ScriptManagerProxy.cs
- FamilyTypeface.cs
- CompoundFileStorageReference.cs
- StrokeIntersection.cs
- TextElementCollection.cs
- CodeDomConfigurationHandler.cs
- NullableFloatAverageAggregationOperator.cs
- WebBaseEventKeyComparer.cs
- OdbcConnectionStringbuilder.cs
- ConfigDefinitionUpdates.cs
- SaveCardRequest.cs
- Rotation3DAnimationUsingKeyFrames.cs
- ProcessModelInfo.cs
- CombinedGeometry.cs
- EventManager.cs
- AccessViolationException.cs
- StandardCommands.cs
- CompilationUtil.cs
- EdmRelationshipRoleAttribute.cs
- EventWaitHandleSecurity.cs
- StructuredType.cs
- DataTableNameHandler.cs
- QuaternionValueSerializer.cs
- TrackingQuery.cs
- SafeArrayTypeMismatchException.cs
- SaveFileDialog.cs
- ConstraintConverter.cs
- DefaultDialogButtons.cs
- LowerCaseStringConverter.cs
- DefaultObjectMappingItemCollection.cs
- Int64AnimationBase.cs
- WSDualHttpSecurityElement.cs
- HitTestFilterBehavior.cs
- RoutedUICommand.cs
- MessageContractMemberAttribute.cs
- CodeFieldReferenceExpression.cs
- FixedSOMPageElement.cs
- CodeTypeReferenceCollection.cs
- TriggerAction.cs
- XPathNodeHelper.cs
- CssTextWriter.cs
- JavaScriptObjectDeserializer.cs
- BitmapEffectGeneralTransform.cs
- RepeaterItemCollection.cs
- WindowsContainer.cs
- NumberFormatInfo.cs
- Stream.cs
- OracleConnectionString.cs
- TemplatePropertyEntry.cs
- StatusStrip.cs
- TileBrush.cs
- SmtpCommands.cs
- TemplateBuilder.cs
- TdsParserSafeHandles.cs
- Bind.cs
- NavigateEvent.cs
- Timer.cs
- VScrollProperties.cs
- MediaTimeline.cs
- SoundPlayer.cs
- FormView.cs
- ContentPlaceHolder.cs
- TraceListener.cs
- PropertyDescriptor.cs
- StatusBarDrawItemEvent.cs
- PassportAuthentication.cs
- SimpleHandlerBuildProvider.cs
- ping.cs
- StorageEntityTypeMapping.cs
- StdValidatorsAndConverters.cs
- UIElementPropertyUndoUnit.cs
- MultiBinding.cs
- InnerItemCollectionView.cs
- RectAnimation.cs
- EntityContainerEntitySetDefiningQuery.cs
- IndexedGlyphRun.cs
- AudioLevelUpdatedEventArgs.cs
- AtlasWeb.Designer.cs
- EntityWithKeyStrategy.cs
- Debugger.cs
- RotateTransform3D.cs
- HttpCacheVary.cs
- CellTreeSimplifier.cs
- HttpRequestContext.cs
- XhtmlTextWriter.cs
- CorrelationToken.cs
- EncoderExceptionFallback.cs
- MarginsConverter.cs
- GridViewCellAutomationPeer.cs
- QueueException.cs
- SystemWebExtensionsSectionGroup.cs
- Console.cs
- DiagnosticStrings.cs
- PrivilegedConfigurationManager.cs