Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / XmlBuffer.cs / 1 / XmlBuffer.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- #define BINARY namespace System.ServiceModel { using System.IO; using System.Xml; using System.Text; using System.Collections.Generic; using System.Diagnostics; using System.ServiceModel.Channels; class XmlBuffer { Listsections; byte[] buffer; int offset; BufferedOutputStream stream; BufferState bufferState; XmlDictionaryWriter writer; XmlDictionaryReaderQuotas quotas; enum BufferState { Created, Writing, Reading, } struct Section { int offset; int size; XmlDictionaryReaderQuotas quotas; public Section(int offset, int size, XmlDictionaryReaderQuotas quotas) { this.offset = offset; this.size = size; this.quotas = quotas; } public int Offset { get { return this.offset; } } public int Size { get { return this.size; } } public XmlDictionaryReaderQuotas Quotas { get { return this.quotas; } } } public XmlBuffer(int maxBufferSize) { if (maxBufferSize < 0) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("maxBufferSize", maxBufferSize, SR.GetString(SR.ValueMustBeNonNegative))); int initialBufferSize = Math.Min(512, maxBufferSize); stream = new BufferedOutputStream(SR.XmlBufferQuotaExceeded, initialBufferSize, maxBufferSize, BufferManager.CreateBufferManager(0, int.MaxValue)); sections = new List (1); } public int BufferSize { get { DiagnosticUtility.DebugAssert(bufferState == BufferState.Reading, "Buffer size shuold only be retrieved during Reading state"); return buffer.Length; } } public int SectionCount { get { return this.sections.Count; } } public XmlDictionaryWriter OpenSection(XmlDictionaryReaderQuotas quotas) { if (bufferState != BufferState.Created) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateInvalidStateException()); bufferState = BufferState.Writing; this.quotas = new XmlDictionaryReaderQuotas(); quotas.CopyTo(this.quotas); if (this.writer == null) { this.writer = XmlDictionaryWriter.CreateBinaryWriter(stream, XD.Dictionary, null, true); } else { ((IXmlBinaryWriterInitializer)this.writer).SetOutput(stream, XD.Dictionary, null, true); } return this.writer; } public void CloseSection() { if (bufferState != BufferState.Writing) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateInvalidStateException()); this.writer.Close(); bufferState = BufferState.Created; int size = (int)stream.Length - offset; sections.Add(new Section(offset, size, this.quotas)); offset += size; } public void Close() { if (bufferState != BufferState.Created) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateInvalidStateException()); bufferState = BufferState.Reading; int bufferSize; buffer = stream.ToArray(out bufferSize); writer = null; stream = null; } Exception CreateInvalidStateException() { return new InvalidOperationException(SR.GetString(SR.XmlBufferInInvalidState)); } public XmlDictionaryReader GetReader(int sectionIndex) { if (bufferState != BufferState.Reading) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateInvalidStateException()); Section section = sections[sectionIndex]; XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(buffer, section.Offset, section.Size, XD.Dictionary, section.Quotas, null, null); reader.MoveToContent(); return reader; } public void WriteTo(int sectionIndex, XmlWriter writer) { if (bufferState != BufferState.Reading) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateInvalidStateException()); XmlDictionaryReader reader = GetReader(sectionIndex); try { writer.WriteNode(reader, false); } finally { reader.Close(); } } } } // 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
- SmtpSpecifiedPickupDirectoryElement.cs
- MeshGeometry3D.cs
- BinaryObjectWriter.cs
- InstanceDataCollectionCollection.cs
- TreeView.cs
- PlatformNotSupportedException.cs
- ActivityContext.cs
- FrameworkElementFactoryMarkupObject.cs
- InputScope.cs
- XNodeNavigator.cs
- MatchingStyle.cs
- SystemWebCachingSectionGroup.cs
- OptimalBreakSession.cs
- CounterCreationData.cs
- PageCatalogPart.cs
- DateTimeAutomationPeer.cs
- SettingsPropertyWrongTypeException.cs
- MetafileHeaderWmf.cs
- Canvas.cs
- CompilerResults.cs
- DBCSCodePageEncoding.cs
- DashStyle.cs
- FactoryGenerator.cs
- _UncName.cs
- SnapshotChangeTrackingStrategy.cs
- PhysicalFontFamily.cs
- OracleParameterCollection.cs
- UIElementParaClient.cs
- ValidatorCollection.cs
- FilterableAttribute.cs
- TypeElementCollection.cs
- InsufficientExecutionStackException.cs
- HtmlEmptyTagControlBuilder.cs
- Common.cs
- PerformanceCounterCategory.cs
- ServiceInfo.cs
- TabPage.cs
- __ConsoleStream.cs
- BitStack.cs
- CompiledQueryCacheEntry.cs
- Stroke2.cs
- TerminatorSinks.cs
- TiffBitmapDecoder.cs
- StorageFunctionMapping.cs
- MatrixTransform.cs
- Exceptions.cs
- FlowDocumentFormatter.cs
- CriticalHandle.cs
- PeerObject.cs
- SHA512Cng.cs
- FontNamesConverter.cs
- EntityCollectionChangedParams.cs
- BufferedReadStream.cs
- ReferencedCollectionType.cs
- FunctionDetailsReader.cs
- DataSourceView.cs
- ResXResourceSet.cs
- DataTable.cs
- ImageConverter.cs
- SourceChangedEventArgs.cs
- RawStylusInput.cs
- CalendarDataBindingHandler.cs
- HybridObjectCache.cs
- MouseDevice.cs
- PointLightBase.cs
- StyleSheet.cs
- ObjectDataSourceMethodEventArgs.cs
- EdmSchemaAttribute.cs
- mil_sdk_version.cs
- SchemaNotation.cs
- WorkflowOperationContext.cs
- PerspectiveCamera.cs
- OutputCacheSettingsSection.cs
- URLBuilder.cs
- GridViewEditEventArgs.cs
- RootNamespaceAttribute.cs
- ReflectionUtil.cs
- ProviderConnectionPoint.cs
- ScriptingProfileServiceSection.cs
- SuppressMessageAttribute.cs
- SequenceFullException.cs
- CompilerState.cs
- CodeCommentStatement.cs
- MenuAutomationPeer.cs
- MachineKeySection.cs
- String.cs
- ViewGenerator.cs
- InlinedAggregationOperatorEnumerator.cs
- AsyncCompletedEventArgs.cs
- FontStretches.cs
- RequestCachingSection.cs
- SQLInt16Storage.cs
- InvalidComObjectException.cs
- ServiceObjectContainer.cs
- LogEntryDeserializer.cs
- BufferModeSettings.cs
- TileModeValidation.cs
- TargetPerspective.cs
- SynchronousSendBindingElement.cs
- IODescriptionAttribute.cs