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
- GenerateScriptTypeAttribute.cs
- ClientSideProviderDescription.cs
- Resources.Designer.cs
- StateDesigner.CommentLayoutGlyph.cs
- HealthMonitoringSection.cs
- WindowProviderWrapper.cs
- RegularExpressionValidator.cs
- MenuAdapter.cs
- ThreadAttributes.cs
- Imaging.cs
- SiteMapPath.cs
- SHA384Managed.cs
- SBCSCodePageEncoding.cs
- RtfToken.cs
- TypeUsage.cs
- ScriptDescriptor.cs
- ParentUndoUnit.cs
- AutoGeneratedFieldProperties.cs
- LineSegment.cs
- OperationAbortedException.cs
- XPathAncestorIterator.cs
- PreviewPrintController.cs
- BaseParser.cs
- UIElement.cs
- AuthenticationModulesSection.cs
- MediaContextNotificationWindow.cs
- DesignerActionList.cs
- UidManager.cs
- HierarchicalDataSourceControl.cs
- recordstatescratchpad.cs
- KeyToListMap.cs
- PackWebResponse.cs
- OrderedEnumerableRowCollection.cs
- DesignOnlyAttribute.cs
- IPPacketInformation.cs
- TagMapInfo.cs
- TypeLoadException.cs
- ImageProxy.cs
- Code.cs
- AssemblyResourceLoader.cs
- MethodCallExpression.cs
- SelectionEditor.cs
- SiteMapNodeCollection.cs
- ZipIOLocalFileBlock.cs
- SimpleWebHandlerParser.cs
- DbConnectionPoolIdentity.cs
- SecurityUtils.cs
- ThreadInterruptedException.cs
- Globals.cs
- DesignerActionListCollection.cs
- StreamingContext.cs
- BitmapEffectDrawingContextWalker.cs
- LayoutSettings.cs
- HtmlLink.cs
- DataSourceCacheDurationConverter.cs
- OdbcParameterCollection.cs
- PropertyIDSet.cs
- SelectionHighlightInfo.cs
- XmlTextWriter.cs
- DataGridItemEventArgs.cs
- DiscoveryClientProtocol.cs
- SingleKeyFrameCollection.cs
- SelectorAutomationPeer.cs
- TreeViewAutomationPeer.cs
- WebPartVerbsEventArgs.cs
- SamlDoNotCacheCondition.cs
- FocusWithinProperty.cs
- HtmlControl.cs
- XmlDataDocument.cs
- DataFieldConverter.cs
- PointConverter.cs
- NamedPipeAppDomainProtocolHandler.cs
- EntityDataSourceDesigner.cs
- RSAProtectedConfigurationProvider.cs
- ImageFormatConverter.cs
- XmlTypeAttribute.cs
- UnsafeNativeMethods.cs
- DisplayInformation.cs
- SiteMap.cs
- SqlStatistics.cs
- XmlWrappingReader.cs
- AuthenticationModuleElementCollection.cs
- WindowsSolidBrush.cs
- XamlTreeBuilderBamlRecordWriter.cs
- ConfigXmlText.cs
- LinkClickEvent.cs
- SafeEventLogWriteHandle.cs
- DataServiceRequest.cs
- CodeConditionStatement.cs
- HtmlInputPassword.cs
- Int64Converter.cs
- UInt64.cs
- RuntimeCompatibilityAttribute.cs
- ListViewItemEventArgs.cs
- DataPointer.cs
- WebBrowser.cs
- DriveInfo.cs
- Compiler.cs
- SqlTrackingQuery.cs
- PingReply.cs