Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / NetFx35 / System.ServiceModel.Web / System / ServiceModel / Channels / HttpStreamMessageEncoderFactory.cs / 1 / HttpStreamMessageEncoderFactory.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.ServiceModel.Channels
{
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Net;
using System.Xml;
using System.Text;
using System.ServiceModel.Dispatcher;
class HttpStreamMessageEncoderFactory : MessageEncoderFactory
{
HttpStreamMessageEncoder encoder;
public HttpStreamMessageEncoderFactory(XmlDictionaryReaderQuotas quotas)
{
this.encoder = new HttpStreamMessageEncoder(quotas);
}
public override MessageEncoder Encoder
{
get { return this.encoder; }
}
public override MessageVersion MessageVersion
{
get { return MessageVersion.None; }
}
public override MessageEncoder CreateSessionEncoder()
{
return this.encoder;
}
internal class HttpStreamMessageEncoder : MessageEncoder
{
string maxReceivedMessageSizeExceededResourceString;
string maxSentMessageSizeExceededResourceString;
XmlDictionaryReaderQuotas quotas;
public HttpStreamMessageEncoder(XmlDictionaryReaderQuotas quotas)
{
this.quotas = quotas;
this.maxSentMessageSizeExceededResourceString = SR2.MaxSentMessageSizeExceeded;
this.maxReceivedMessageSizeExceededResourceString = SR2.MaxReceivedMessageSizeExceeded;
}
public override string ContentType
{
get { return null; }
}
public override string MediaType
{
get { return null; }
}
public override MessageVersion MessageVersion
{
get { return MessageVersion.None; }
}
public override bool IsContentTypeSupported(string contentType)
{
return true;
}
public override Message ReadMessage(ArraySegment buffer, BufferManager bufferManager, string contentType)
{
if (bufferManager == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("bufferManager");
}
Message result;
using (BufferedOutputStream stream = new BufferedOutputStream(maxReceivedMessageSizeExceededResourceString, 0, int.MaxValue, bufferManager))
{
stream.Write(buffer.Array, 0, buffer.Count);
result = ReadMessage(stream.ToMemoryStream(), int.MaxValue, contentType);
bufferManager.ReturnBuffer(buffer.Array);
return result;
}
}
public override Message ReadMessage(Stream stream, int maxSizeOfHeaders, string contentType)
{
if (stream == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("stream");
}
Message result = Message.CreateMessage(new HttpStreamXmlDictionaryReader(stream, this.quotas), maxSizeOfHeaders, MessageVersion.None);
result.Properties.Encoder = this;
return result;
}
public override void WriteMessage(Message message, Stream stream)
{
if (message == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message");
}
if (stream == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("stream");
}
message.Properties.Encoder = this;
using (HttpStreamXmlDictionaryWriter writer = new HttpStreamXmlDictionaryWriter(stream))
{
message.WriteMessage(writer);
writer.Flush();
}
}
public override ArraySegment WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
{
if (message == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message");
}
if (bufferManager == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("bufferManager");
}
if (maxMessageSize < 0)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("maxMessageSize"));
}
using (BufferedOutputStream stream = new BufferedOutputStream(this.maxSentMessageSizeExceededResourceString, 0, maxMessageSize, bufferManager))
{
stream.Skip(messageOffset);
WriteMessage(message, stream);
int size;
byte[] buffer = stream.ToArray(out size);
return new ArraySegment(buffer, 0, size - messageOffset);
}
}
}
}
}
// 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
- BamlBinaryReader.cs
- UnsafeNativeMethods.cs
- CompositeCollection.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- LinkedDataMemberFieldEditor.cs
- DataGridAddNewRow.cs
- DiscoveryUtility.cs
- TextBox.cs
- MessageSecurityTokenVersion.cs
- WebRequestModuleElementCollection.cs
- PowerModeChangedEventArgs.cs
- HTTPNotFoundHandler.cs
- StringKeyFrameCollection.cs
- ResourcePermissionBaseEntry.cs
- EndEvent.cs
- EpmSyndicationContentSerializer.cs
- GeometryDrawing.cs
- webeventbuffer.cs
- MemberMaps.cs
- CellTreeNodeVisitors.cs
- ToolStripPanelRow.cs
- KeyValuePair.cs
- CLRBindingWorker.cs
- DetailsViewInsertedEventArgs.cs
- DataPager.cs
- HttpListenerPrefixCollection.cs
- XamlSerializer.cs
- NativeMethods.cs
- EditorPartChrome.cs
- FixedDSBuilder.cs
- SecUtil.cs
- CheckPair.cs
- CompoundFileReference.cs
- BulletedList.cs
- StorageFunctionMapping.cs
- ApplicationManager.cs
- EntityDataSourceReferenceGroup.cs
- LongPath.cs
- ListViewCommandEventArgs.cs
- AssemblySettingAttributes.cs
- SmtpNegotiateAuthenticationModule.cs
- MouseGestureValueSerializer.cs
- ToolZone.cs
- TheQuery.cs
- MatrixUtil.cs
- Rect.cs
- ContainerControl.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- StreamingContext.cs
- Model3DGroup.cs
- NumericExpr.cs
- DBCSCodePageEncoding.cs
- Int32AnimationBase.cs
- Int64KeyFrameCollection.cs
- Mutex.cs
- HideDisabledControlAdapter.cs
- ImageAutomationPeer.cs
- VScrollBar.cs
- FullTextLine.cs
- WebColorConverter.cs
- PackageRelationshipCollection.cs
- ApplicationBuildProvider.cs
- IndexedString.cs
- TouchPoint.cs
- Variable.cs
- ServiceOperation.cs
- MenuCommand.cs
- BinHexEncoder.cs
- ConnectionInterfaceCollection.cs
- TrackingMemoryStream.cs
- Transform3D.cs
- SingleTagSectionHandler.cs
- DataGridTablesFactory.cs
- DataGridHyperlinkColumn.cs
- SortDescriptionCollection.cs
- DefaultBindingPropertyAttribute.cs
- MobilePage.cs
- WebBrowser.cs
- ReferencedCollectionType.cs
- XmlSchemaComplexType.cs
- StyleXamlParser.cs
- FontStyleConverter.cs
- Asn1IntegerConverter.cs
- infer.cs
- securestring.cs
- CellConstant.cs
- XmlUtilWriter.cs
- DisposableCollectionWrapper.cs
- Metafile.cs
- PeerNeighborManager.cs
- ProxyElement.cs
- TextPointerBase.cs
- XmlDataSourceView.cs
- DelayedRegex.cs
- ItemContainerProviderWrapper.cs
- ButtonFlatAdapter.cs
- DbConnectionHelper.cs
- SizeAnimation.cs
- TextPenaltyModule.cs
- CodeDirectoryCompiler.cs