Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / BodyWriter.cs / 1 / BodyWriter.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Xml; using System.Diagnostics; public abstract class BodyWriter { bool isBuffered; bool canWrite; object thisLock; protected BodyWriter(bool isBuffered) { this.isBuffered = isBuffered; this.canWrite = true; if (!this.isBuffered) { this.thisLock = new object(); } } public bool IsBuffered { get { return this.isBuffered; } } internal virtual bool IsEmpty { get { return false; } } internal virtual bool IsFault { get { return false; } } public BodyWriter CreateBufferedCopy(int maxBufferSize) { if (maxBufferSize < 0) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("maxBufferSize", maxBufferSize, SR.GetString(SR.ValueMustBeNonNegative))); if (this.isBuffered) { return this; } else { lock (this.thisLock) { if (!this.canWrite) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.BodyWriterCanOnlyBeWrittenOnce))); this.canWrite = false; } BodyWriter bodyWriter = OnCreateBufferedCopy(maxBufferSize); if (!bodyWriter.IsBuffered) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.BodyWriterReturnedIsNotBuffered))); return bodyWriter; } } protected virtual BodyWriter OnCreateBufferedCopy(int maxBufferSize) { return OnCreateBufferedCopy(maxBufferSize, XmlDictionaryReaderQuotas.Max); } internal BodyWriter OnCreateBufferedCopy(int maxBufferSize, XmlDictionaryReaderQuotas quotas) { XmlBuffer buffer = new XmlBuffer(maxBufferSize); using (XmlDictionaryWriter writer = buffer.OpenSection(quotas)) { writer.WriteStartElement("a"); OnWriteBodyContents(writer); writer.WriteEndElement(); } buffer.CloseSection(); buffer.Close(); return new BufferedBodyWriter(buffer); } protected abstract void OnWriteBodyContents(XmlDictionaryWriter writer); public void WriteBodyContents(XmlDictionaryWriter writer) { if (writer == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("writer")); if (!this.isBuffered) { lock (this.thisLock) { if (!this.canWrite) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.BodyWriterCanOnlyBeWrittenOnce))); this.canWrite = false; } } OnWriteBodyContents(writer); } class BufferedBodyWriter : BodyWriter { XmlBuffer buffer; public BufferedBodyWriter(XmlBuffer buffer) : base(true) { this.buffer = buffer; } protected override void OnWriteBodyContents(XmlDictionaryWriter writer) { XmlDictionaryReader reader = this.buffer.GetReader(0); using (reader) { reader.ReadStartElement(); while (reader.NodeType != XmlNodeType.EndElement) { writer.WriteNode(reader, false); } reader.ReadEndElement(); } } } } } // 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
- RangeBaseAutomationPeer.cs
- MediaTimeline.cs
- InvalidComObjectException.cs
- TextTreeFixupNode.cs
- CallContext.cs
- PathParser.cs
- Schema.cs
- SimpleFieldTemplateFactory.cs
- ConstraintEnumerator.cs
- ButtonChrome.cs
- UIElementCollection.cs
- LoadWorkflowByKeyAsyncResult.cs
- XmlKeywords.cs
- GenericUriParser.cs
- BlockExpression.cs
- TextBox.cs
- XmlSchemaNotation.cs
- DataColumnMapping.cs
- SystemColors.cs
- DrawingContextDrawingContextWalker.cs
- ConstNode.cs
- Visual3DCollection.cs
- ItemContainerGenerator.cs
- DocumentViewerAutomationPeer.cs
- ValidatorUtils.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- SimpleWorkerRequest.cs
- SmtpFailedRecipientsException.cs
- ContextBase.cs
- ThreadAbortException.cs
- UntypedNullExpression.cs
- XmlNamespaceDeclarationsAttribute.cs
- TableLayoutPanelCodeDomSerializer.cs
- CodeCatchClause.cs
- XhtmlTextWriter.cs
- PerfService.cs
- SafeMemoryMappedFileHandle.cs
- ExtensibleClassFactory.cs
- Profiler.cs
- FilePresentation.cs
- ButtonPopupAdapter.cs
- ScriptControl.cs
- HtmlButton.cs
- ObjectDataSource.cs
- WeakRefEnumerator.cs
- TrustManager.cs
- TemplateBuilder.cs
- CookieParameter.cs
- RequestSecurityTokenForRemoteTokenFactory.cs
- ObjectComplexPropertyMapping.cs
- WebUtil.cs
- FormViewDeletedEventArgs.cs
- SqlAggregateChecker.cs
- SrgsSemanticInterpretationTag.cs
- XmlValidatingReaderImpl.cs
- FixedSOMLineRanges.cs
- ADMembershipProvider.cs
- ArcSegment.cs
- HtmlHistory.cs
- MainMenu.cs
- SplineKeyFrames.cs
- Rfc4050KeyFormatter.cs
- HtmlInputButton.cs
- SchemaExporter.cs
- RegistryKey.cs
- HebrewCalendar.cs
- VsPropertyGrid.cs
- DataGridColumnHeaderItemAutomationPeer.cs
- uribuilder.cs
- UnionCodeGroup.cs
- Renderer.cs
- X509SecurityTokenProvider.cs
- DataTableMappingCollection.cs
- TextModifier.cs
- ObjectListFieldCollection.cs
- XsdValidatingReader.cs
- ButtonBase.cs
- TextElementCollectionHelper.cs
- ScriptControlManager.cs
- XmlSchemaGroup.cs
- Attributes.cs
- DbDataAdapter.cs
- SqlRewriteScalarSubqueries.cs
- PolygonHotSpot.cs
- RenderDataDrawingContext.cs
- FamilyTypeface.cs
- SpeechRecognitionEngine.cs
- ResourceContainer.cs
- DefinitionBase.cs
- BulletedListEventArgs.cs
- SerializationInfo.cs
- PartDesigner.cs
- MemberDomainMap.cs
- listitem.cs
- AsyncOperationManager.cs
- DropShadowEffect.cs
- ContentElement.cs
- QilTargetType.cs
- Encoder.cs
- DataTablePropertyDescriptor.cs