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
- MILUtilities.cs
- SmiConnection.cs
- Task.cs
- DebugView.cs
- DataGridViewRowPostPaintEventArgs.cs
- TransformConverter.cs
- InvalidFilterCriteriaException.cs
- PiiTraceSource.cs
- EllipseGeometry.cs
- WorkflowRuntimeService.cs
- DisplayMemberTemplateSelector.cs
- ObjectConverter.cs
- GridView.cs
- DataServiceSaveChangesEventArgs.cs
- ConfigurationValue.cs
- DecimalAnimation.cs
- FlowLayoutSettings.cs
- XmlWhitespace.cs
- SqlCacheDependency.cs
- DataGridViewToolTip.cs
- CustomValidator.cs
- ListItemViewControl.cs
- EntryPointNotFoundException.cs
- Util.cs
- Transform3DGroup.cs
- TextInfo.cs
- InputLanguage.cs
- UpdateCompiler.cs
- DragEvent.cs
- DiscoveryDocumentSearchPattern.cs
- ContentFileHelper.cs
- EventArgs.cs
- TimeStampChecker.cs
- XMLSchema.cs
- Substitution.cs
- CodeCompiler.cs
- RequestNavigateEventArgs.cs
- Wildcard.cs
- RowBinding.cs
- ViewGenResults.cs
- ValidationSettings.cs
- DataGridViewColumnTypeEditor.cs
- WebZone.cs
- Pts.cs
- ExpressionCopier.cs
- ExtendedPropertyDescriptor.cs
- SimpleMailWebEventProvider.cs
- TablePattern.cs
- RSAPKCS1SignatureFormatter.cs
- WebColorConverter.cs
- TreeViewHitTestInfo.cs
- ReflectionPermission.cs
- MarkerProperties.cs
- StyleBamlRecordReader.cs
- XmlUrlEditor.cs
- ClientConfigurationHost.cs
- Script.cs
- CancelEventArgs.cs
- SqlConnection.cs
- WebBrowser.cs
- FormViewModeEventArgs.cs
- MissingManifestResourceException.cs
- IntSecurity.cs
- SolidColorBrush.cs
- TraceSwitch.cs
- XPathNodeIterator.cs
- GroupJoinQueryOperator.cs
- WebPartsPersonalizationAuthorization.cs
- ContainerVisual.cs
- ManagementOperationWatcher.cs
- SchemaNames.cs
- ViewEvent.cs
- XmlEventCache.cs
- MLangCodePageEncoding.cs
- ObjectNotFoundException.cs
- CodeRemoveEventStatement.cs
- Thickness.cs
- WithParamAction.cs
- DocumentsTrace.cs
- SqlInternalConnectionSmi.cs
- ToolStripRenderEventArgs.cs
- DynamicResourceExtensionConverter.cs
- URLString.cs
- SspiSafeHandles.cs
- NotImplementedException.cs
- ChangeProcessor.cs
- SmiEventSink_DeferedProcessing.cs
- SuppressIldasmAttribute.cs
- webclient.cs
- ExceptionUtility.cs
- RubberbandSelector.cs
- XPathNodeList.cs
- ComponentRenameEvent.cs
- ToolboxControl.cs
- JsonWriterDelegator.cs
- EmptyControlCollection.cs
- DispatcherFrame.cs
- GetPageNumberCompletedEventArgs.cs
- EndpointIdentityExtension.cs
- MetadataResolver.cs