Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / BufferedMessageWriter.cs / 1 / BufferedMessageWriter.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { using System.IO; using System.Xml; using System.Diagnostics; abstract class BufferedMessageWriter { int[] sizeHistory; int sizeHistoryIndex; const int sizeHistoryCount = 4; const int expectedSizeVariance = 256; BufferedOutputStream stream; public BufferedMessageWriter() { stream = new BufferedOutputStream(SR.MaxSentMessageSizeExceeded); InitMessagePredicter(); } protected abstract XmlDictionaryWriter TakeXmlWriter(Stream stream); protected abstract void ReturnXmlWriter(XmlDictionaryWriter writer); public ArraySegmentWriteMessage(Message message, BufferManager bufferManager, int initialOffset, int maxSizeQuota) { int effectiveMaxSize; // make sure that maxSize has room for initialOffset without overflowing, since // the effective buffer size is message size + initialOffset if (maxSizeQuota <= int.MaxValue - initialOffset) effectiveMaxSize = maxSizeQuota + initialOffset; else effectiveMaxSize = int.MaxValue; int predictedMessageSize = PredictMessageSize(); if (predictedMessageSize > effectiveMaxSize) predictedMessageSize = effectiveMaxSize; else if (predictedMessageSize < initialOffset) predictedMessageSize = initialOffset; try { stream.Init(predictedMessageSize, maxSizeQuota, effectiveMaxSize, bufferManager); stream.Skip(initialOffset); XmlDictionaryWriter writer = TakeXmlWriter(stream); OnWriteStartMessage(writer); message.WriteMessage(writer); OnWriteEndMessage(writer); writer.Flush(); ReturnXmlWriter(writer); int size; byte[] buffer = stream.ToArray(out size); RecordActualMessageSize(size); return new ArraySegment (buffer, initialOffset, size - initialOffset); } finally { stream.Clear(); } } protected virtual void OnWriteStartMessage(XmlDictionaryWriter writer) { } protected virtual void OnWriteEndMessage(XmlDictionaryWriter writer) { } void InitMessagePredicter() { sizeHistory = new int[4]; for (int i = 0; i < sizeHistoryCount; i++) sizeHistory[i] = 256; } int PredictMessageSize() { int max = 0; for (int i = 0; i < sizeHistoryCount; i++) if (sizeHistory[i] > max) max = sizeHistory[i]; return max + expectedSizeVariance; } void RecordActualMessageSize(int size) { sizeHistory[sizeHistoryIndex] = size; sizeHistoryIndex = (sizeHistoryIndex + 1) % sizeHistoryCount; } } } // 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
- KeySpline.cs
- MediaSystem.cs
- HyperLink.cs
- IntranetCredentialPolicy.cs
- SchemaTypeEmitter.cs
- ServiceModelSecurityTokenTypes.cs
- Panel.cs
- TextShapeableCharacters.cs
- SmtpNegotiateAuthenticationModule.cs
- SqlProfileProvider.cs
- CodeFieldReferenceExpression.cs
- UndirectedGraph.cs
- DeferredSelectedIndexReference.cs
- ADMembershipProvider.cs
- Style.cs
- ServiceHttpModule.cs
- AssemblyAttributesGoHere.cs
- EFTableProvider.cs
- DecimalStorage.cs
- ConsumerConnectionPointCollection.cs
- NavigationService.cs
- InlineObject.cs
- Parser.cs
- UIElement3D.cs
- RegexInterpreter.cs
- RemotingHelper.cs
- CloudCollection.cs
- ToolTip.cs
- DecoderExceptionFallback.cs
- MatrixIndependentAnimationStorage.cs
- ImageInfo.cs
- Attributes.cs
- AssemblyAttributes.cs
- CrossSiteScriptingValidation.cs
- OperationCanceledException.cs
- SoapIgnoreAttribute.cs
- DescriptionAttribute.cs
- Brushes.cs
- Effect.cs
- FunctionDefinition.cs
- HScrollBar.cs
- ToolStripDropDownClosedEventArgs.cs
- MenuBindingsEditor.cs
- OleDbPermission.cs
- SerialReceived.cs
- Knowncolors.cs
- WebReferenceCollection.cs
- CodeTypeDelegate.cs
- SystemIPInterfaceStatistics.cs
- FilterException.cs
- followingquery.cs
- WrapPanel.cs
- Size3D.cs
- TextServicesProperty.cs
- BulletDecorator.cs
- SecurityCriticalDataForSet.cs
- ActivityCodeDomSerializationManager.cs
- SqlHelper.cs
- Slider.cs
- DiscoveryClientChannelFactory.cs
- DataServiceClientException.cs
- Environment.cs
- CodePrimitiveExpression.cs
- PeerApplication.cs
- mactripleDES.cs
- UniqueIdentifierService.cs
- PolyLineSegment.cs
- _NegoStream.cs
- RangeExpression.cs
- PersonalizablePropertyEntry.cs
- ListViewItemMouseHoverEvent.cs
- ServicePointManagerElement.cs
- RegexGroup.cs
- WebBrowser.cs
- QilParameter.cs
- InvalidPropValue.cs
- SchemaCollectionPreprocessor.cs
- GridViewUpdatedEventArgs.cs
- Point3D.cs
- XmlSchemaAttributeGroupRef.cs
- CodeGotoStatement.cs
- GAC.cs
- EntityClassGenerator.cs
- ManagementOptions.cs
- CodeCatchClause.cs
- CompositeTypefaceMetrics.cs
- EncryptedPackage.cs
- PointAnimationBase.cs
- EpmContentDeSerializer.cs
- XmlSchemaSimpleContentRestriction.cs
- DesignerVerbCollection.cs
- _NetworkingPerfCounters.cs
- TextModifierScope.cs
- AuthenticationModuleElementCollection.cs
- RankException.cs
- BamlLocalizableResource.cs
- Clock.cs
- PriorityRange.cs
- ValueProviderWrapper.cs
- ListControlBoundActionList.cs