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
- DatatypeImplementation.cs
- ChannelFactoryRefCache.cs
- XamlRtfConverter.cs
- TypedAsyncResult.cs
- WinHttpWebProxyFinder.cs
- SerializerProvider.cs
- TrustManagerMoreInformation.cs
- NodeInfo.cs
- SafeThreadHandle.cs
- HtmlProps.cs
- BindingsCollection.cs
- BlockUIContainer.cs
- Cell.cs
- ToolStripOverflow.cs
- SystemColors.cs
- EventMappingSettings.cs
- CLRBindingWorker.cs
- JsonSerializer.cs
- CngProvider.cs
- TableRow.cs
- SqlRowUpdatedEvent.cs
- WebPartConnectionsConfigureVerb.cs
- SqlDataRecord.cs
- FormatterConverter.cs
- ColumnClickEvent.cs
- TextDocumentView.cs
- RSAPKCS1SignatureDeformatter.cs
- ListMarkerLine.cs
- BitConverter.cs
- FixedDocumentSequencePaginator.cs
- HttpCapabilitiesBase.cs
- CompositionDesigner.cs
- NativeBuffer.cs
- initElementDictionary.cs
- LOSFormatter.cs
- ToolBarButtonClickEvent.cs
- IfAction.cs
- ProxyFragment.cs
- EditorZoneBase.cs
- WhitespaceRuleLookup.cs
- TextViewElement.cs
- SmtpReplyReader.cs
- ServiceProviders.cs
- FileVersion.cs
- EventDescriptorCollection.cs
- TypeInfo.cs
- SocketPermission.cs
- Keywords.cs
- SqlInternalConnectionSmi.cs
- Assembly.cs
- TypedTableBaseExtensions.cs
- Span.cs
- HttpConfigurationSystem.cs
- LocalizableResourceBuilder.cs
- SmtpFailedRecipientsException.cs
- WSAddressing10ProblemHeaderQNameFault.cs
- DataGridViewCellStyleConverter.cs
- ProvidersHelper.cs
- ContentIterators.cs
- WsdlBuildProvider.cs
- BlurEffect.cs
- EventRecord.cs
- AtlasWeb.Designer.cs
- DataServiceResponse.cs
- PrintEvent.cs
- BlockCollection.cs
- DoubleAnimation.cs
- ValidationError.cs
- QilGenerator.cs
- DataGridViewLinkCell.cs
- DeferredBinaryDeserializerExtension.cs
- NativeActivityAbortContext.cs
- DoubleAnimationBase.cs
- DataServiceCollectionOfT.cs
- Win32.cs
- DataKey.cs
- Cloud.cs
- ScriptReferenceBase.cs
- RuntimeConfigLKG.cs
- SqlDataSourceCommandEventArgs.cs
- HeaderedContentControl.cs
- AddInBase.cs
- SqlFunctionAttribute.cs
- MDIWindowDialog.cs
- listitem.cs
- ExtensibleClassFactory.cs
- EmptyEnumerator.cs
- DiagnosticTraceSource.cs
- NameValueConfigurationElement.cs
- SmtpNetworkElement.cs
- ColumnResizeUndoUnit.cs
- FSWPathEditor.cs
- ProfileServiceManager.cs
- ActivationServices.cs
- OneOf.cs
- SoapMessage.cs
- oledbmetadatacolumnnames.cs
- CredentialCache.cs
- XPathAncestorIterator.cs
- XmlDeclaration.cs