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
- PageTheme.cs
- MethodBuilder.cs
- Interlocked.cs
- connectionpool.cs
- ProcessManager.cs
- ListViewUpdatedEventArgs.cs
- Matrix3DStack.cs
- Point4DValueSerializer.cs
- TextSpanModifier.cs
- PackageDigitalSignatureManager.cs
- CatalogPart.cs
- _TransmitFileOverlappedAsyncResult.cs
- InputScopeAttribute.cs
- Latin1Encoding.cs
- WebRequest.cs
- TableLayoutCellPaintEventArgs.cs
- SqlUnionizer.cs
- ConnectionsZoneAutoFormat.cs
- FormViewUpdateEventArgs.cs
- SignedXmlDebugLog.cs
- NodeInfo.cs
- WindowsTitleBar.cs
- DependencyObjectCodeDomSerializer.cs
- SID.cs
- QueryOpeningEnumerator.cs
- DecimalConstantAttribute.cs
- NotifyCollectionChangedEventArgs.cs
- ReachFixedPageSerializer.cs
- GeneratedView.cs
- AuthorizationRule.cs
- ComponentDesigner.cs
- PackageRelationshipSelector.cs
- InternalSafeNativeMethods.cs
- CheckPair.cs
- SiteMapNodeItemEventArgs.cs
- ThreadStateException.cs
- DoubleLink.cs
- DescriptionAttribute.cs
- AddressHeaderCollectionElement.cs
- Rect3D.cs
- TreeNodeBinding.cs
- AttachedAnnotationChangedEventArgs.cs
- Attributes.cs
- KeyGestureConverter.cs
- DbConnectionInternal.cs
- InternalConfigConfigurationFactory.cs
- DocumentPageTextView.cs
- IntSecurity.cs
- SelectionWordBreaker.cs
- IISUnsafeMethods.cs
- ConfigurationPermission.cs
- SiteMapNode.cs
- AssemblyBuilderData.cs
- DataGridViewHeaderCell.cs
- XmlUtilWriter.cs
- StringStorage.cs
- DoubleLink.cs
- DataObjectFieldAttribute.cs
- ObjectAssociationEndMapping.cs
- GlyphsSerializer.cs
- TextStore.cs
- SiblingIterators.cs
- QueryServiceConfigHandle.cs
- LocalizableAttribute.cs
- ProgramNode.cs
- GridViewCommandEventArgs.cs
- FormViewDeleteEventArgs.cs
- GlobalProxySelection.cs
- ValidateNames.cs
- SizeFConverter.cs
- BidOverLoads.cs
- TypeToken.cs
- CodeEventReferenceExpression.cs
- ManifestSignedXml.cs
- HostingEnvironmentSection.cs
- DirtyTextRange.cs
- ComponentResourceKey.cs
- CodeGen.cs
- Matrix3DConverter.cs
- BeginSelectCardRequest.cs
- ApplicationSecurityInfo.cs
- ColumnCollectionEditor.cs
- HyperLinkStyle.cs
- NameTable.cs
- XmlEnumAttribute.cs
- Decorator.cs
- StagingAreaInputItem.cs
- FormViewModeEventArgs.cs
- FreeFormDragDropManager.cs
- StatusBarPanelClickEvent.cs
- SctClaimDictionary.cs
- SpellerHighlightLayer.cs
- Vector.cs
- PhoneCall.cs
- Boolean.cs
- SplineKeyFrames.cs
- TypeUsage.cs
- Restrictions.cs
- TypeElementCollection.cs
- SmtpException.cs