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
- TCPClient.cs
- GroupBox.cs
- StateDesignerConnector.cs
- WebServiceMethodData.cs
- Executor.cs
- InkCanvasAutomationPeer.cs
- SHA256Managed.cs
- WrappedIUnknown.cs
- XmlSchemaDatatype.cs
- ToolBarOverflowPanel.cs
- MemoryFailPoint.cs
- URIFormatException.cs
- XamlInterfaces.cs
- XmlWrappingWriter.cs
- StreamWriter.cs
- unitconverter.cs
- ExportException.cs
- SystemIPv6InterfaceProperties.cs
- WorkflowCompensationBehavior.cs
- InitializerFacet.cs
- FormsIdentity.cs
- WindowsSysHeader.cs
- Calendar.cs
- References.cs
- _Semaphore.cs
- XmlSignatureProperties.cs
- RichTextBoxAutomationPeer.cs
- KeyManager.cs
- recordstatescratchpad.cs
- RenderData.cs
- WSFederationHttpSecurityElement.cs
- HandleDictionary.cs
- QilTernary.cs
- TripleDESCryptoServiceProvider.cs
- ObjectStateFormatter.cs
- ListenerConnectionModeReader.cs
- GuidelineCollection.cs
- DesignerHelpers.cs
- EmptyElement.cs
- ClassDataContract.cs
- TextEditorThreadLocalStore.cs
- Schema.cs
- _HelperAsyncResults.cs
- MimeParameterWriter.cs
- Monitor.cs
- IImplicitResourceProvider.cs
- SerializableTypeCodeDomSerializer.cs
- UInt32.cs
- GridViewCommandEventArgs.cs
- XmlValidatingReaderImpl.cs
- NetworkInformationException.cs
- AttachedAnnotation.cs
- HttpApplication.cs
- EntityException.cs
- XmlHierarchyData.cs
- QfeChecker.cs
- HtmlInputCheckBox.cs
- HtmlControlPersistable.cs
- XamlReaderHelper.cs
- Console.cs
- SystemInfo.cs
- PriorityBindingExpression.cs
- DoubleMinMaxAggregationOperator.cs
- basecomparevalidator.cs
- DynamicRenderer.cs
- SafeFindHandle.cs
- CqlIdentifiers.cs
- InputProcessorProfiles.cs
- SystemWebCachingSectionGroup.cs
- StringAnimationUsingKeyFrames.cs
- XmlDataLoader.cs
- SqlFunctionAttribute.cs
- FixedTextSelectionProcessor.cs
- UiaCoreApi.cs
- DoubleAnimationUsingPath.cs
- ListControl.cs
- AdRotator.cs
- GenericTypeParameterConverter.cs
- SqlExpander.cs
- Constants.cs
- InputProcessorProfilesLoader.cs
- DeviceContext.cs
- AssertSection.cs
- AdornerLayer.cs
- UIntPtr.cs
- CalendarDesigner.cs
- IntegrationExceptionEventArgs.cs
- CultureTableRecord.cs
- PictureBox.cs
- AxImporter.cs
- ResolveCompletedEventArgs.cs
- LogSwitch.cs
- VolatileEnlistmentMultiplexing.cs
- Function.cs
- DataContract.cs
- ETagAttribute.cs
- BitmapPalettes.cs
- ElementMarkupObject.cs
- ImageAnimator.cs
- WriteFileContext.cs