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
- Substitution.cs
- Form.cs
- EditingMode.cs
- TextRenderer.cs
- Interlocked.cs
- CompilerTypeWithParams.cs
- BitmapEffectInputData.cs
- TimelineGroup.cs
- TextElementAutomationPeer.cs
- NativeCppClassAttribute.cs
- FormsAuthenticationConfiguration.cs
- InternalBufferManager.cs
- NameValueConfigurationElement.cs
- ResourceReferenceKeyNotFoundException.cs
- TreeNodeConverter.cs
- GridToolTip.cs
- sqlstateclientmanager.cs
- TextDecorationCollection.cs
- altserialization.cs
- ModifiableIteratorCollection.cs
- CodeRegionDirective.cs
- SqlIdentifier.cs
- Pkcs7Recipient.cs
- PersonalizationEntry.cs
- GlyphingCache.cs
- NumericExpr.cs
- ReachSerializer.cs
- PropertyDescriptorCollection.cs
- WindowsRichEditRange.cs
- EntityStoreSchemaGenerator.cs
- ModuleBuilderData.cs
- GeometryCombineModeValidation.cs
- TdsParserSafeHandles.cs
- WindowShowOrOpenTracker.cs
- precedingquery.cs
- WebContext.cs
- InheritanceAttribute.cs
- RestrictedTransactionalPackage.cs
- ThreadStaticAttribute.cs
- VectorAnimation.cs
- XmlSchemaSequence.cs
- TextFormatterImp.cs
- CorrelationActionMessageFilter.cs
- MessageSecurityVersionConverter.cs
- WinEventWrap.cs
- ActivitiesCollection.cs
- ResourceCategoryAttribute.cs
- ConfigurationValidatorAttribute.cs
- PipelineModuleStepContainer.cs
- DbDataRecord.cs
- EntityTypeEmitter.cs
- CardSpaceShim.cs
- ParamArrayAttribute.cs
- SiteMapNodeItemEventArgs.cs
- CodeCompiler.cs
- SafeBitVector32.cs
- CodeDomSerializer.cs
- TreeNodeEventArgs.cs
- JumpTask.cs
- StandardToolWindows.cs
- UrlAuthFailedErrorFormatter.cs
- UiaCoreTypesApi.cs
- ClientApiGenerator.cs
- ImageListDesigner.cs
- EventMappingSettings.cs
- UDPClient.cs
- ReflectPropertyDescriptor.cs
- VisualStateChangedEventArgs.cs
- SchemaCompiler.cs
- DataBindingHandlerAttribute.cs
- ShapeTypeface.cs
- AnnotationMap.cs
- RunClient.cs
- CacheEntry.cs
- TextShapeableCharacters.cs
- SetStateEventArgs.cs
- COM2ColorConverter.cs
- ElementMarkupObject.cs
- SqlConnectionPoolGroupProviderInfo.cs
- StreamGeometry.cs
- TextContainerChangedEventArgs.cs
- ComboBox.cs
- BinaryHeap.cs
- MD5.cs
- StrongNameMembershipCondition.cs
- ReadWriteSpinLock.cs
- NonVisualControlAttribute.cs
- ImageFormat.cs
- wgx_render.cs
- TemplateLookupAction.cs
- SHA384CryptoServiceProvider.cs
- QilXmlWriter.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- XPathAncestorIterator.cs
- CacheDependency.cs
- DisposableCollectionWrapper.cs
- XamlStream.cs
- ipaddressinformationcollection.cs
- SpellCheck.cs
- PersonalizableTypeEntry.cs