Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / BinaryMessageEncodingBindingElement.cs / 1 / BinaryMessageEncodingBindingElement.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.ServiceModel.Channels
{
using System.Reflection;
using System.ServiceModel.Description;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Xml;
using System.Collections.Generic;
public sealed class BinaryMessageEncodingBindingElement : MessageEncodingBindingElement, IWsdlExportExtension, IPolicyExportExtension
{
int maxReadPoolSize;
int maxWritePoolSize;
XmlDictionaryReaderQuotas readerQuotas;
int maxSessionSize;
BinaryVersion binaryVersion;
MessageVersion messageVersion;
public BinaryMessageEncodingBindingElement()
{
this.maxReadPoolSize = EncoderDefaults.MaxReadPoolSize;
this.maxWritePoolSize = EncoderDefaults.MaxWritePoolSize;
this.readerQuotas = new XmlDictionaryReaderQuotas();
EncoderDefaults.ReaderQuotas.CopyTo(this.readerQuotas);
this.maxSessionSize = BinaryEncoderDefaults.MaxSessionSize;
this.binaryVersion = BinaryEncoderDefaults.BinaryVersion;
this.messageVersion = MessageVersion.CreateVersion(BinaryEncoderDefaults.EnvelopeVersion);
}
BinaryMessageEncodingBindingElement(BinaryMessageEncodingBindingElement elementToBeCloned) : base(elementToBeCloned)
{
this.maxReadPoolSize = elementToBeCloned.maxReadPoolSize;
this.maxWritePoolSize = elementToBeCloned.maxWritePoolSize;
this.readerQuotas = new XmlDictionaryReaderQuotas();
elementToBeCloned.readerQuotas.CopyTo(this.readerQuotas);
this.MaxSessionSize = elementToBeCloned.MaxSessionSize;
this.BinaryVersion = elementToBeCloned.BinaryVersion;
this.messageVersion = elementToBeCloned.messageVersion;
}
/* public */ BinaryVersion BinaryVersion
{
get
{
return binaryVersion;
}
set
{
if (value == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("value"));
}
this.binaryVersion = value;
}
}
public override MessageVersion MessageVersion
{
get { return this.messageVersion; }
set
{
if (value == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
}
if (value.Envelope != BinaryEncoderDefaults.EnvelopeVersion)
{
string errorMsg = SR.GetString(SR.UnsupportedEnvelopeVersion, this.GetType().FullName, BinaryEncoderDefaults.EnvelopeVersion, value.Envelope);
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(errorMsg));
}
this.messageVersion = MessageVersion.CreateVersion(BinaryEncoderDefaults.EnvelopeVersion, value.Addressing);
}
}
public int MaxReadPoolSize
{
get
{
return this.maxReadPoolSize;
}
set
{
if (value <= 0)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value,
SR.GetString(SR.ValueMustBePositive)));
}
this.maxReadPoolSize = value;
}
}
public int MaxWritePoolSize
{
get
{
return this.maxWritePoolSize;
}
set
{
if (value <= 0)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value,
SR.GetString(SR.ValueMustBePositive)));
}
this.maxWritePoolSize = value;
}
}
public XmlDictionaryReaderQuotas ReaderQuotas
{
get
{
return this.readerQuotas;
}
}
public int MaxSessionSize
{
get
{
return this.maxSessionSize;
}
set
{
if (value < 0)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value,
SR.GetString(SR.ValueMustBeNonNegative)));
}
this.maxSessionSize = value;
}
}
public override IChannelFactory BuildChannelFactory(BindingContext context)
{
return InternalBuildChannelFactory(context);
}
public override IChannelListener BuildChannelListener(BindingContext context)
{
return InternalBuildChannelListener(context);
}
public override bool CanBuildChannelListener(BindingContext context)
{
return InternalCanBuildChannelListener(context);
}
public override BindingElement Clone()
{
return new BinaryMessageEncodingBindingElement(this);
}
public override MessageEncoderFactory CreateMessageEncoderFactory()
{
return new BinaryMessageEncoderFactory(this.MessageVersion, this.MaxReadPoolSize, this.MaxWritePoolSize, this.MaxSessionSize, this.ReaderQuotas, this.BinaryVersion);
}
public override T GetProperty(BindingContext context)
{
if (context == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
}
if (typeof(T) == typeof(XmlDictionaryReaderQuotas))
{
return (T)(object)this.readerQuotas;
}
else
{
return base.GetProperty(context);
}
}
void IPolicyExportExtension.ExportPolicy(MetadataExporter exporter, PolicyConversionContext policyContext)
{
if (policyContext == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("policyContext");
}
XmlDocument document = new XmlDocument();
policyContext.GetBindingAssertions().Add(document.CreateElement(
MessageEncodingPolicyConstants.BinaryEncodingPrefix,
MessageEncodingPolicyConstants.BinaryEncodingName,
MessageEncodingPolicyConstants.BinaryEncodingNamespace));
}
void IWsdlExportExtension.ExportContract(WsdlExporter exporter, WsdlContractConversionContext context) { }
void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
{
if (context == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
}
SoapHelper.SetSoapVersion(context, exporter, MessageVersion.Soap12WSAddressing10.Envelope);
}
internal override bool IsMatch(BindingElement b)
{
if (!base.IsMatch(b))
return false;
BinaryMessageEncodingBindingElement binary = b as BinaryMessageEncodingBindingElement;
if (binary == null)
return false;
if (this.maxReadPoolSize != binary.MaxReadPoolSize)
return false;
if (this.maxWritePoolSize != binary.MaxWritePoolSize)
return false;
// compare XmlDictionaryReaderQuotas
if (this.readerQuotas.MaxStringContentLength != binary.ReaderQuotas.MaxStringContentLength)
return false;
if (this.readerQuotas.MaxArrayLength != binary.ReaderQuotas.MaxArrayLength)
return false;
if (this.readerQuotas.MaxBytesPerRead != binary.ReaderQuotas.MaxBytesPerRead)
return false;
if (this.readerQuotas.MaxDepth != binary.ReaderQuotas.MaxDepth)
return false;
if (this.readerQuotas.MaxNameTableCharCount != binary.ReaderQuotas.MaxNameTableCharCount)
return false;
if (this.MaxSessionSize != binary.MaxSessionSize)
return false;
return true;
}
}
}
// 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
- RunWorkerCompletedEventArgs.cs
- XmlEnumAttribute.cs
- Options.cs
- Crypto.cs
- Transaction.cs
- SmtpDigestAuthenticationModule.cs
- HtmlInputFile.cs
- ServiceEndpointAssociationProvider.cs
- Wizard.cs
- RadioButtonDesigner.cs
- WsdlImporter.cs
- PermissionToken.cs
- Facet.cs
- GeneralTransform2DTo3DTo2D.cs
- WebPartConnectionsConfigureVerb.cs
- SamlSubjectStatement.cs
- ScrollBar.cs
- SqlDataSourceTableQuery.cs
- EntityDescriptor.cs
- VirtualPathUtility.cs
- XmlDataFileEditor.cs
- _NegoStream.cs
- NativeMethods.cs
- AuthenticationConfig.cs
- WebPartCancelEventArgs.cs
- Matrix.cs
- FlowLayoutPanel.cs
- DataServiceBuildProvider.cs
- RawStylusInputCustomDataList.cs
- TextServicesManager.cs
- NativeWindow.cs
- TextMetrics.cs
- CollectionExtensions.cs
- basecomparevalidator.cs
- UnsafeNativeMethods.cs
- CommandHelper.cs
- XsdDataContractExporter.cs
- DataGridViewSelectedRowCollection.cs
- SafeLocalMemHandle.cs
- MonitorWrapper.cs
- WebBodyFormatMessageProperty.cs
- SafePointer.cs
- AtomicFile.cs
- ParallelTimeline.cs
- SignatureResourcePool.cs
- EntityDesignerBuildProvider.cs
- WithStatement.cs
- AlternateView.cs
- MetabaseServerConfig.cs
- ColumnResult.cs
- XslNumber.cs
- nulltextcontainer.cs
- BindStream.cs
- AuthenticationConfig.cs
- HttpCacheParams.cs
- IdnMapping.cs
- CalendarDateRange.cs
- IndexedSelectQueryOperator.cs
- PolicyException.cs
- TransformedBitmap.cs
- PresentationTraceSources.cs
- TextStore.cs
- FileUtil.cs
- DocumentManager.cs
- NegotiateStream.cs
- CompiledIdentityConstraint.cs
- PrefixQName.cs
- ProfilePropertyMetadata.cs
- Baml6ConstructorInfo.cs
- TextBoxAutomationPeer.cs
- SQLGuid.cs
- KerberosTicketHashIdentifierClause.cs
- MailWriter.cs
- ArrayList.cs
- Clipboard.cs
- ThreadStartException.cs
- WindowsToolbar.cs
- StyleSheetDesigner.cs
- ScriptReferenceEventArgs.cs
- DynamicDocumentPaginator.cs
- SwitchExpression.cs
- ReadOnlyHierarchicalDataSourceView.cs
- ObjectDataSourceEventArgs.cs
- TTSEngineTypes.cs
- DragDeltaEventArgs.cs
- X509Certificate2Collection.cs
- GridItemPattern.cs
- ActionItem.cs
- SymmetricCryptoHandle.cs
- ProjectionNode.cs
- SqlCacheDependency.cs
- HttpSessionStateBase.cs
- QueryContinueDragEvent.cs
- LineGeometry.cs
- StorageMappingFragment.cs
- EditorOptionAttribute.cs
- HtmlElementCollection.cs
- StylusPlugInCollection.cs
- DynamicPropertyReader.cs
- IPipelineRuntime.cs