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
- SmiTypedGetterSetter.cs
- XsdValidatingReader.cs
- HierarchicalDataSourceControl.cs
- Cursors.cs
- DetailsViewCommandEventArgs.cs
- NativeMethods.cs
- RequestQueryParser.cs
- ClientApiGenerator.cs
- SpeechSynthesizer.cs
- UnsafeNativeMethods.cs
- DurableInstanceManager.cs
- Filter.cs
- SchemaTableOptionalColumn.cs
- DesignerEventService.cs
- HttpModuleCollection.cs
- milrender.cs
- BrowserDefinition.cs
- ScrollProviderWrapper.cs
- CriticalFileToken.cs
- HMAC.cs
- _SSPIWrapper.cs
- AddInContractAttribute.cs
- BinaryCommonClasses.cs
- DateRangeEvent.cs
- InputReportEventArgs.cs
- ToolZone.cs
- XmlNodeChangedEventManager.cs
- RowCache.cs
- ComplexPropertyEntry.cs
- _LazyAsyncResult.cs
- StateItem.cs
- ObjectPersistData.cs
- datacache.cs
- TripleDESCryptoServiceProvider.cs
- CorrelationManager.cs
- ResourcePermissionBaseEntry.cs
- SqlBooleanizer.cs
- DbCommandTree.cs
- XmlChoiceIdentifierAttribute.cs
- XsdValidatingReader.cs
- GenericsInstances.cs
- xdrvalidator.cs
- SuppressMergeCheckAttribute.cs
- Soap.cs
- ExceptionHandlers.cs
- SortedDictionary.cs
- HostingEnvironmentException.cs
- PagePropertiesChangingEventArgs.cs
- XsltQilFactory.cs
- DBSqlParserTable.cs
- IsolatedStorageException.cs
- RadioButtonList.cs
- CodeFieldReferenceExpression.cs
- EdmMember.cs
- ToolStripItemImageRenderEventArgs.cs
- AssociationTypeEmitter.cs
- ValidationSummary.cs
- HtmlAnchor.cs
- ViewBase.cs
- FixedSOMLineRanges.cs
- InvalidPrinterException.cs
- SqlServices.cs
- MouseOverProperty.cs
- InvokeFunc.cs
- PointValueSerializer.cs
- TableChangeProcessor.cs
- SQLDoubleStorage.cs
- HtmlTextArea.cs
- ObjectDataSourceDisposingEventArgs.cs
- LogExtentCollection.cs
- GeneralTransform.cs
- Style.cs
- SliderAutomationPeer.cs
- EncoderFallback.cs
- ToolStripItemCollection.cs
- SpotLight.cs
- OpenFileDialog.cs
- QueryableDataSourceView.cs
- Encoding.cs
- Debug.cs
- SeekStoryboard.cs
- EventLogEntry.cs
- SafeCertificateContext.cs
- CreateUserWizard.cs
- OverflowException.cs
- StopStoryboard.cs
- SortQueryOperator.cs
- ReachPageContentCollectionSerializerAsync.cs
- SyncOperationState.cs
- HebrewCalendar.cs
- ImplicitInputBrush.cs
- EventRouteFactory.cs
- TraceUtils.cs
- DescendantQuery.cs
- RootBrowserWindowAutomationPeer.cs
- BinHexDecoder.cs
- XmlSchemaObjectCollection.cs
- XamlPathDataSerializer.cs
- ExtendedProperty.cs
- BackEase.cs