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
- _SafeNetHandles.cs
- WorkItem.cs
- Hex.cs
- WebPartConnectionsCloseVerb.cs
- FilterUserControlBase.cs
- ObjectAnimationUsingKeyFrames.cs
- ScriptReferenceEventArgs.cs
- WebSysDisplayNameAttribute.cs
- StrokeNode.cs
- TreeNodeCollection.cs
- TextCompositionEventArgs.cs
- SafeNativeMethods.cs
- RunClient.cs
- FastEncoderWindow.cs
- MetadataSource.cs
- InfocardExtendedInformationCollection.cs
- ComponentResourceManager.cs
- XmlSerializableReader.cs
- XmlObjectSerializerReadContextComplex.cs
- SendKeys.cs
- XmlDataFileEditor.cs
- FontSource.cs
- XmlSchemaAny.cs
- DataGridViewLayoutData.cs
- ArrayElementGridEntry.cs
- InstanceDescriptor.cs
- IArgumentProvider.cs
- ConstraintStruct.cs
- DefaultPropertyAttribute.cs
- TypedDataSetSchemaImporterExtensionFx35.cs
- ClientUrlResolverWrapper.cs
- Compiler.cs
- ClientSettingsStore.cs
- AppDomainProtocolHandler.cs
- CompilerLocalReference.cs
- ServiceProviders.cs
- KoreanCalendar.cs
- DataSourceView.cs
- WebPartConnection.cs
- ScriptRegistrationManager.cs
- EntityDataSourceDesigner.cs
- InputLanguage.cs
- ControlTemplate.cs
- HandleExceptionArgs.cs
- WebDisplayNameAttribute.cs
- ProfileInfo.cs
- DbModificationClause.cs
- AnimationException.cs
- DiscardableAttribute.cs
- CallContext.cs
- InitializerFacet.cs
- ToolStripArrowRenderEventArgs.cs
- InkCanvas.cs
- MemberDescriptor.cs
- BaseCAMarshaler.cs
- DataGridViewMethods.cs
- BamlCollectionHolder.cs
- ADConnectionHelper.cs
- XPathMultyIterator.cs
- HtmlMeta.cs
- ExceptionUtil.cs
- SQLMoney.cs
- FromReply.cs
- Message.cs
- ClientBuildManagerCallback.cs
- SystemFonts.cs
- InputReport.cs
- GeometryCombineModeValidation.cs
- PenThreadWorker.cs
- Point3DAnimationUsingKeyFrames.cs
- HtmlContainerControl.cs
- ActivityAction.cs
- TypeListConverter.cs
- WebPartCancelEventArgs.cs
- ProfilePropertySettingsCollection.cs
- ContextBase.cs
- X509CertificateCollection.cs
- WebControlAdapter.cs
- NonClientArea.cs
- ParsedAttributeCollection.cs
- DefaultEventAttribute.cs
- SoundPlayerAction.cs
- FormViewModeEventArgs.cs
- AbstractDataSvcMapFileLoader.cs
- EntityClientCacheEntry.cs
- TraceData.cs
- SymbolMethod.cs
- ReplyChannelBinder.cs
- FileChangesMonitor.cs
- IsolatedStorageFilePermission.cs
- FlowDocumentPageViewerAutomationPeer.cs
- CodeSnippetExpression.cs
- FileSystemEventArgs.cs
- DataGridViewCellValidatingEventArgs.cs
- BadImageFormatException.cs
- QueryContinueDragEvent.cs
- RuntimeEnvironment.cs
- Ref.cs
- DoubleConverter.cs
- ParserContext.cs