Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / BufferedMessageData.cs / 1 / BufferedMessageData.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { using System.IO; using System.Xml; using System.Text; using System.Collections.Generic; abstract class BufferedMessageData : IBufferedMessageData { ArraySegmentbuffer; BufferManager bufferManager; int refCount; int outstandingReaders; bool multipleUsers; RecycledMessageState messageState; SynchronizedPool messageStatePool; public BufferedMessageData(SynchronizedPool messageStatePool) { this.messageStatePool = messageStatePool; } public ArraySegment Buffer { get { return buffer; } } public BufferManager BufferManager { get { return bufferManager; } } public virtual XmlDictionaryReaderQuotas Quotas { get { return XmlDictionaryReaderQuotas.Max; } } public abstract MessageEncoder MessageEncoder { get; } object ThisLock { get { return this; } } public void EnableMultipleUsers() { multipleUsers = true; } public void Close() { if (multipleUsers) { lock (ThisLock) { if (--this.refCount == 0) { DoClose(); } } } else { DoClose(); } } void DoClose() { bufferManager.ReturnBuffer(buffer.Array); if (outstandingReaders == 0) { bufferManager = null; buffer = new ArraySegment (); OnClosed(); } } public void DoReturnMessageState(RecycledMessageState messageState) { if (this.messageState == null) { this.messageState = messageState; } else { messageStatePool.Return(messageState); } } void DoReturnXmlReader(XmlDictionaryReader reader) { ReturnXmlReader(reader); outstandingReaders--; } public RecycledMessageState DoTakeMessageState() { RecycledMessageState messageState = this.messageState; if (messageState != null) { this.messageState = null; return messageState; } else { return messageStatePool.Take(); } } XmlDictionaryReader DoTakeXmlReader() { XmlDictionaryReader reader = TakeXmlReader(); outstandingReaders++; return reader; } public XmlDictionaryReader GetMessageReader() { if (multipleUsers) { lock (ThisLock) { return DoTakeXmlReader(); } } else { return DoTakeXmlReader(); } } public void OnXmlReaderClosed(XmlDictionaryReader reader) { if (multipleUsers) { lock (ThisLock) { DoReturnXmlReader(reader); } } else { DoReturnXmlReader(reader); } } protected virtual void OnClosed() { } public RecycledMessageState TakeMessageState() { if (multipleUsers) { lock (ThisLock) { return DoTakeMessageState(); } } else { return DoTakeMessageState(); } } protected abstract XmlDictionaryReader TakeXmlReader(); public void Open() { lock (ThisLock) { this.refCount++; } } public void Open(ArraySegment buffer, BufferManager bufferManager) { this.refCount = 1; this.bufferManager = bufferManager; this.buffer = buffer; multipleUsers = false; } protected abstract void ReturnXmlReader(XmlDictionaryReader xmlReader); public void ReturnMessageState(RecycledMessageState messageState) { if (multipleUsers) { lock (ThisLock) { DoReturnMessageState(messageState); } } else { DoReturnMessageState(messageState); } } } } // 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
- StructuralType.cs
- TableRow.cs
- complextypematerializer.cs
- ByteStream.cs
- StringDictionary.cs
- SerialReceived.cs
- returneventsaver.cs
- WebHttpDispatchOperationSelector.cs
- StringArrayConverter.cs
- SocketPermission.cs
- wgx_commands.cs
- BaseComponentEditor.cs
- DataGridViewBand.cs
- GridViewColumnCollectionChangedEventArgs.cs
- TrackingMemoryStream.cs
- IssuanceLicense.cs
- InlineCollection.cs
- OverloadGroupAttribute.cs
- LabelLiteral.cs
- PermissionSet.cs
- Rotation3DKeyFrameCollection.cs
- StringUtil.cs
- CompareValidator.cs
- ScrollContentPresenter.cs
- DirectoryInfo.cs
- InterleavedZipPartStream.cs
- XXXOnTypeBuilderInstantiation.cs
- InputLangChangeEvent.cs
- UInt16Converter.cs
- EmptyReadOnlyDictionaryInternal.cs
- SafeWaitHandle.cs
- TypeInitializationException.cs
- ChooseAction.cs
- SafeProcessHandle.cs
- WebPartZoneBase.cs
- FontStretchConverter.cs
- OdbcConnectionStringbuilder.cs
- Axis.cs
- HtmlToClrEventProxy.cs
- BindingMemberInfo.cs
- serverconfig.cs
- SecureUICommand.cs
- SrgsSemanticInterpretationTag.cs
- SqlGatherProducedAliases.cs
- PageThemeBuildProvider.cs
- MethodRental.cs
- CriticalHandle.cs
- PackagePartCollection.cs
- Transform3DGroup.cs
- UIElementParaClient.cs
- FileUtil.cs
- CompensateDesigner.cs
- StatusBarPanel.cs
- UIElementIsland.cs
- StorageScalarPropertyMapping.cs
- wgx_sdk_version.cs
- AspNetCacheProfileAttribute.cs
- TemplateBaseAction.cs
- DataGridViewLinkCell.cs
- COMException.cs
- RowCache.cs
- precedingsibling.cs
- HierarchicalDataBoundControlAdapter.cs
- ContainerCodeDomSerializer.cs
- CriticalFinalizerObject.cs
- CachedPathData.cs
- PropertyState.cs
- MediaTimeline.cs
- ShapeTypeface.cs
- Renderer.cs
- TargetException.cs
- CacheModeConverter.cs
- DataView.cs
- VerificationAttribute.cs
- CellParaClient.cs
- LinearGradientBrush.cs
- ConstantCheck.cs
- NativeRightsManagementAPIsStructures.cs
- FilteredDataSetHelper.cs
- Rect3DValueSerializer.cs
- LogRestartAreaEnumerator.cs
- DataGridViewMethods.cs
- PeerNameRecordCollection.cs
- ConnectionProviderAttribute.cs
- NotConverter.cs
- WizardStepBase.cs
- ReflectionUtil.cs
- BamlCollectionHolder.cs
- DescendantOverDescendantQuery.cs
- AnnotationMap.cs
- DoubleStorage.cs
- SqlSelectStatement.cs
- NamedPipeDuplicateContext.cs
- documentsequencetextview.cs
- TimerEventSubscriptionCollection.cs
- DataGridRelationshipRow.cs
- WriteableBitmap.cs
- Lease.cs
- GreenMethods.cs
- AppDomainGrammarProxy.cs