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
- RIPEMD160Managed.cs
- DecimalFormatter.cs
- CharacterString.cs
- ModuleElement.cs
- MdiWindowListItemConverter.cs
- EncryptedKeyIdentifierClause.cs
- LazyTextWriterCreator.cs
- PropertyMap.cs
- IndexedGlyphRun.cs
- PerspectiveCamera.cs
- MetaModel.cs
- Int32CAMarshaler.cs
- ReachDocumentSequenceSerializer.cs
- LogLogRecordHeader.cs
- WebPartConnectionsConnectVerb.cs
- LineVisual.cs
- HttpContextBase.cs
- ExpandCollapsePattern.cs
- IndexOutOfRangeException.cs
- StringReader.cs
- Calendar.cs
- SqlDataSourceCommandEventArgs.cs
- DecoderBestFitFallback.cs
- MemberDescriptor.cs
- XmlWrappingWriter.cs
- TaskHelper.cs
- ComPersistableTypeElement.cs
- RightsManagementEncryptedStream.cs
- EntityTypeEmitter.cs
- WizardSideBarListControlItem.cs
- RSAPKCS1SignatureFormatter.cs
- SqlDataSourceCache.cs
- TextShapeableCharacters.cs
- SelectionGlyphBase.cs
- ArrayItemReference.cs
- XpsFontSubsetter.cs
- WebDescriptionAttribute.cs
- Models.cs
- Int64.cs
- ObjectViewEntityCollectionData.cs
- MessageProperties.cs
- TTSEvent.cs
- ScalarConstant.cs
- CodeConstructor.cs
- TrackBar.cs
- DocumentSequenceHighlightLayer.cs
- UdpDuplexChannel.cs
- PostBackOptions.cs
- GuidTagList.cs
- WeakKeyDictionary.cs
- ActionItem.cs
- PtsCache.cs
- DataGridViewCheckBoxColumn.cs
- Schema.cs
- BooleanToVisibilityConverter.cs
- IsolatedStorage.cs
- SqlDataSourceView.cs
- Oci.cs
- ChtmlTextWriter.cs
- DesignerOptionService.cs
- AuthorizationRuleCollection.cs
- ButtonField.cs
- TextSearch.cs
- FieldTemplateUserControl.cs
- SoapProtocolImporter.cs
- DBConnectionString.cs
- FillBehavior.cs
- ReadOnlyDictionary.cs
- PersistStreamTypeWrapper.cs
- TextEditorCharacters.cs
- ImageAutomationPeer.cs
- TypeConverterAttribute.cs
- SmtpMail.cs
- KeyConstraint.cs
- FormsAuthenticationModule.cs
- LinkArea.cs
- MimeMapping.cs
- BindingCompleteEventArgs.cs
- GlobalizationSection.cs
- EncoderReplacementFallback.cs
- CommonRemoteMemoryBlock.cs
- MsmqPoisonMessageException.cs
- _Semaphore.cs
- UpDownBaseDesigner.cs
- FastEncoderWindow.cs
- __FastResourceComparer.cs
- ColorPalette.cs
- GlobalizationAssembly.cs
- VoiceObjectToken.cs
- CookieProtection.cs
- CompiledQueryCacheKey.cs
- CodeDomSerializerException.cs
- StyleReferenceConverter.cs
- StringKeyFrameCollection.cs
- CompilerWrapper.cs
- TextElementEditingBehaviorAttribute.cs
- UrlPath.cs
- GridViewCellAutomationPeer.cs
- WebPartMenu.cs
- WSHttpBindingBase.cs