Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / MaxMessageSizeStream.cs / 1 / MaxMessageSizeStream.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { using System.IO; using System.ServiceModel; using System.Diagnostics; class MaxMessageSizeStream : DelegatingStream { long maxMessageSize; long totalBytesRead; long bytesWritten; public MaxMessageSizeStream(Stream stream, long maxMessageSize) : base(stream) { this.maxMessageSize = maxMessageSize; } public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { count = PrepareRead(count); return base.BeginRead(buffer, offset, count, callback, state); } public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { PrepareWrite(count); return base.BeginWrite(buffer, offset, count, callback, state); } public override int EndRead(IAsyncResult result) { return FinishRead(base.EndRead(result)); } public override int Read(byte[] buffer, int offset, int count) { count = PrepareRead(count); return FinishRead(base.Read(buffer, offset, count)); } public override int ReadByte() { PrepareRead(1); int i = base.ReadByte(); if (i != -1) FinishRead(1); return i; } public override void Write(byte[] buffer, int offset, int count) { PrepareWrite(count); base.Write(buffer, offset, count); } public override void WriteByte(byte value) { PrepareWrite(1); base.WriteByte(value); } internal static Exception CreateMaxReceivedMessageSizeExceededException(long maxMessageSize) { string message = SR.GetString(SR.MaxReceivedMessageSizeExceeded, maxMessageSize); Exception inner = new QuotaExceededException(message); return new CommunicationException(message, inner); } internal static Exception CreateMaxSentMessageSizeExceededException(long maxMessageSize) { string message = SR.GetString(SR.MaxSentMessageSizeExceeded, maxMessageSize); Exception inner = new QuotaExceededException(message); return new CommunicationException(message, inner); } int PrepareRead(int bytesToRead) { if (totalBytesRead >= maxMessageSize) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateMaxReceivedMessageSizeExceededException(maxMessageSize)); } long bytesRemaining = maxMessageSize - totalBytesRead; if (bytesRemaining > int.MaxValue) { return bytesToRead; } else { return Math.Min(bytesToRead, (int)(maxMessageSize - totalBytesRead)); } } int FinishRead(int bytesRead) { totalBytesRead += bytesRead; return bytesRead; } void PrepareWrite(int bytesToWrite) { if (bytesWritten + bytesToWrite > maxMessageSize) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateMaxSentMessageSizeExceededException(maxMessageSize)); } bytesWritten += bytesToWrite; } } } // 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
- DetailsView.cs
- linebase.cs
- SessionStateItemCollection.cs
- BitmapEffectOutputConnector.cs
- DataKey.cs
- ApplicationDirectoryMembershipCondition.cs
- ListViewCancelEventArgs.cs
- parserscommon.cs
- BaseDataListComponentEditor.cs
- ECDiffieHellmanCngPublicKey.cs
- TemplatePartAttribute.cs
- DataViewManagerListItemTypeDescriptor.cs
- XmlQueryCardinality.cs
- ControlParameter.cs
- ThumbAutomationPeer.cs
- IFormattable.cs
- HostedImpersonationContext.cs
- TraceContext.cs
- DrawingContextDrawingContextWalker.cs
- DependencyStoreSurrogate.cs
- pingexception.cs
- WindowHideOrCloseTracker.cs
- Pkcs7Signer.cs
- ProfilePropertySettings.cs
- CqlQuery.cs
- DiagnosticSection.cs
- CodeGenerator.cs
- CompModSwitches.cs
- PenThreadWorker.cs
- X509InitiatorCertificateServiceElement.cs
- basecomparevalidator.cs
- XPathNode.cs
- HtmlWindowCollection.cs
- MimeMultiPart.cs
- SyndicationLink.cs
- MatrixStack.cs
- DBBindings.cs
- FileFormatException.cs
- TypeGeneratedEventArgs.cs
- XmlSchemaObjectCollection.cs
- EntitySqlQueryState.cs
- QuaternionRotation3D.cs
- RegexCompilationInfo.cs
- NominalTypeEliminator.cs
- ComponentDispatcherThread.cs
- WsdlContractConversionContext.cs
- MetafileHeaderWmf.cs
- RegexMatch.cs
- CacheOutputQuery.cs
- PropertyGridCommands.cs
- CombinedGeometry.cs
- MethodBuilder.cs
- ProcessModuleCollection.cs
- CodeBinaryOperatorExpression.cs
- DataStreamFromComStream.cs
- CultureInfoConverter.cs
- WinInetCache.cs
- ObjectDataSourceMethodEventArgs.cs
- CompositeDispatchFormatter.cs
- GridErrorDlg.cs
- FlowDocumentScrollViewer.cs
- XmlCharacterData.cs
- CodeVariableDeclarationStatement.cs
- SHA512Managed.cs
- messageonlyhwndwrapper.cs
- HostProtectionException.cs
- Filter.cs
- Part.cs
- OutputCacheSettings.cs
- MetricEntry.cs
- FixUp.cs
- ColumnMapCopier.cs
- PlatformCulture.cs
- AutomationAttributeInfo.cs
- ManipulationInertiaStartingEventArgs.cs
- Queue.cs
- Char.cs
- Light.cs
- MenuItemAutomationPeer.cs
- Blend.cs
- Content.cs
- MessageAction.cs
- XmlSchemaObjectTable.cs
- Component.cs
- DragDeltaEventArgs.cs
- Perspective.cs
- FieldTemplateUserControl.cs
- HttpWrapper.cs
- JavaScriptSerializer.cs
- ContentElement.cs
- _WebProxyDataBuilder.cs
- Content.cs
- DBSqlParserTable.cs
- Vector3D.cs
- DataGridComponentEditor.cs
- ConfigurationSectionGroupCollection.cs
- _ProxyChain.cs
- DrawingGroupDrawingContext.cs
- FocusChangedEventArgs.cs
- VisualTreeUtils.cs