Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / WSDualHttpBinding.cs / 1 / WSDualHttpBinding.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel { using System; using System.Text; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Configuration; using System.Globalization; using System.Net; using System.Net.Security; using System.Runtime.Serialization; using System.Security.Principal; using System.ServiceModel.Channels; using System.ServiceModel.Configuration; using System.ServiceModel.Security; using System.Xml; public class WSDualHttpBinding : Binding, IBindingRuntimePreferences { WSMessageEncoding messageEncoding; ReliableSession reliableSession; // private BindingElements HttpTransportBindingElement httpTransport; TextMessageEncodingBindingElement textEncoding; MtomMessageEncodingBindingElement mtomEncoding; TransactionFlowBindingElement txFlow; ReliableSessionBindingElement session; CompositeDuplexBindingElement compositeDuplex; OneWayBindingElement oneWay; WSDualHttpSecurity security = new WSDualHttpSecurity(); public WSDualHttpBinding(string configName) : this() { ApplyConfiguration(configName); } public WSDualHttpBinding(WSDualHttpSecurityMode securityMode) : this() { this.security.Mode = securityMode; } public WSDualHttpBinding() { Initialize(); } WSDualHttpBinding( HttpTransportBindingElement transport, MessageEncodingBindingElement encoding, TransactionFlowBindingElement txFlow, ReliableSessionBindingElement session, CompositeDuplexBindingElement compositeDuplex, OneWayBindingElement oneWay, WSDualHttpSecurity security) : this() { this.security = security; InitializeFrom(transport, encoding, txFlow, session, compositeDuplex, oneWay); } public bool BypassProxyOnLocal { get { return httpTransport.BypassProxyOnLocal; } set { httpTransport.BypassProxyOnLocal = value; } } public Uri ClientBaseAddress { get { return this.compositeDuplex.ClientBaseAddress; } set { this.compositeDuplex.ClientBaseAddress = value; } } public bool TransactionFlow { get { return this.txFlow.Transactions; } set { this.txFlow.Transactions = value; } } public HostNameComparisonMode HostNameComparisonMode { get { return httpTransport.HostNameComparisonMode; } set { httpTransport.HostNameComparisonMode = value; } } public long MaxBufferPoolSize { get { return httpTransport.MaxBufferPoolSize; } set { httpTransport.MaxBufferPoolSize = value; } } public long MaxReceivedMessageSize { get { return httpTransport.MaxReceivedMessageSize; } set { if (value > int.MaxValue) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new ArgumentOutOfRangeException("value.MaxReceivedMessageSize", SR.GetString(SR.MaxReceivedMessageSizeMustBeInIntegerRange))); } httpTransport.MaxReceivedMessageSize = value; mtomEncoding.MaxBufferSize = (int)value; } } public WSMessageEncoding MessageEncoding { get { return messageEncoding; } set { messageEncoding = value; } } public Uri ProxyAddress { get { return httpTransport.ProxyAddress; } set { httpTransport.ProxyAddress = value; } } public XmlDictionaryReaderQuotas ReaderQuotas { get { return textEncoding.ReaderQuotas; } set { if (value == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value"); value.CopyTo(textEncoding.ReaderQuotas); value.CopyTo(mtomEncoding.ReaderQuotas); } } public ReliableSession ReliableSession { get { return reliableSession; } } public override string Scheme { get { return httpTransport.Scheme; } } public EnvelopeVersion EnvelopeVersion { get { return EnvelopeVersion.Soap12; } } public System.Text.Encoding TextEncoding { get { return textEncoding.WriteEncoding; } set { textEncoding.WriteEncoding = value; mtomEncoding.WriteEncoding = value; } } public bool UseDefaultWebProxy { get { return httpTransport.UseDefaultWebProxy; } set { httpTransport.UseDefaultWebProxy = value; } } public WSDualHttpSecurity Security { get { return this.security; } } bool IBindingRuntimePreferences.ReceiveSynchronously { get { return false; } } static TransactionFlowBindingElement GetDefaultTransactionFlowBindingElement() { TransactionFlowBindingElement tfbe = new TransactionFlowBindingElement(false); tfbe.TransactionProtocol = TransactionProtocol.WSAtomicTransactionOctober2004; return tfbe; } void Initialize() { this.httpTransport = new HttpTransportBindingElement(); this.messageEncoding = WSDualHttpBindingDefaults.MessageEncoding; this.txFlow = GetDefaultTransactionFlowBindingElement(); this.session = new ReliableSessionBindingElement(true); this.textEncoding = new TextMessageEncodingBindingElement(); this.textEncoding.MessageVersion = MessageVersion.Soap12WSAddressing10; this.mtomEncoding = new MtomMessageEncodingBindingElement(); this.mtomEncoding.MessageVersion = MessageVersion.Soap12WSAddressing10; this.compositeDuplex = new CompositeDuplexBindingElement(); this.reliableSession = new ReliableSession(session); this.oneWay = new OneWayBindingElement(); } void InitializeFrom( HttpTransportBindingElement transport, MessageEncodingBindingElement encoding, TransactionFlowBindingElement txFlow, ReliableSessionBindingElement session, CompositeDuplexBindingElement compositeDuplex, OneWayBindingElement oneWay) { // transport this.BypassProxyOnLocal = transport.BypassProxyOnLocal; this.HostNameComparisonMode = transport.HostNameComparisonMode; this.MaxBufferPoolSize = transport.MaxBufferPoolSize; this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize; this.ProxyAddress = transport.ProxyAddress; this.UseDefaultWebProxy = transport.UseDefaultWebProxy; // this binding only supports Text and Mtom encoding if (encoding is TextMessageEncodingBindingElement) { this.MessageEncoding = WSMessageEncoding.Text; TextMessageEncodingBindingElement text = (TextMessageEncodingBindingElement)encoding; this.TextEncoding = text.WriteEncoding; this.ReaderQuotas = text.ReaderQuotas; } else if (encoding is MtomMessageEncodingBindingElement) { messageEncoding = WSMessageEncoding.Mtom; MtomMessageEncodingBindingElement mtom = (MtomMessageEncodingBindingElement)encoding; this.TextEncoding = mtom.WriteEncoding; this.ReaderQuotas = mtom.ReaderQuotas; } this.TransactionFlow = txFlow.Transactions; this.ClientBaseAddress = compositeDuplex.ClientBaseAddress; //session if (session != null) { // only set properties that have standard binding manifestations this.session.InactivityTimeout = session.InactivityTimeout; this.session.Ordered = session.Ordered; } } // check that properties of the HttpTransportBindingElement and // MessageEncodingBindingElement not exposed as properties on WsHttpBinding // match default values of the binding elements bool IsBindingElementsMatch(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding, TransactionFlowBindingElement txFlow, ReliableSessionBindingElement session, CompositeDuplexBindingElement compositeDuplex, OneWayBindingElement oneWay) { if (!this.httpTransport.IsMatch(transport)) return false; if (this.MessageEncoding == WSMessageEncoding.Text) { if (!this.textEncoding.IsMatch(encoding)) return false; } else if (this.MessageEncoding == WSMessageEncoding.Mtom) { if (!this.mtomEncoding.IsMatch(encoding)) return false; } if (!this.txFlow.IsMatch(txFlow)) return false; if (!this.session.IsMatch(session)) return false; if (!this.compositeDuplex.IsMatch(compositeDuplex)) return false; if (!this.oneWay.IsMatch(oneWay)) { return false; } return true; } void ApplyConfiguration(string configurationName) { WSDualHttpBindingCollectionElement section = WSDualHttpBindingCollectionElement.GetBindingCollectionElement(); WSDualHttpBindingElement element = section.Bindings[configurationName]; if (element == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException( SR.GetString(SR.ConfigInvalidBindingConfigurationName, configurationName, ConfigurationStrings.WSDualHttpBindingCollectionElementName))); } else { element.ApplyConfiguration(this); } } SecurityBindingElement CreateMessageSecurity() { return this.Security.CreateMessageSecurity(); } static bool TryCreateSecurity(SecurityBindingElement securityElement, out WSDualHttpSecurity security) { return WSDualHttpSecurity.TryCreate(securityElement, out security); } public override BindingElementCollection CreateBindingElements() { // return collection of BindingElements BindingElementCollection bindingElements = new BindingElementCollection(); // order of BindingElements is important // add context bindingElements.Add(txFlow); // add session bindingElements.Add(session); // add security (optional) SecurityBindingElement wsSecurity = CreateMessageSecurity(); if (wsSecurity != null) { bindingElements.Add(wsSecurity); } // add duplex bindingElements.Add(compositeDuplex); // add oneWay adapter bindingElements.Add(oneWay); // add encoding (text or mtom) WSMessageEncodingHelper.SyncUpEncodingBindingElementProperties(textEncoding, mtomEncoding); if (this.MessageEncoding == WSMessageEncoding.Text) { bindingElements.Add(textEncoding); } else if (this.MessageEncoding == WSMessageEncoding.Mtom) { bindingElements.Add(mtomEncoding); } // add transport bindingElements.Add(httpTransport); return bindingElements.Clone(); } internal static bool TryCreate(BindingElementCollection elements, out Binding binding) { binding = null; if (elements.Count > 7) { return false; } SecurityBindingElement sbe = null; HttpTransportBindingElement transport = null; MessageEncodingBindingElement encoding = null; TransactionFlowBindingElement txFlow = null; ReliableSessionBindingElement session = null; CompositeDuplexBindingElement compositeDuplex = null; OneWayBindingElement oneWay = null; foreach (BindingElement element in elements) { if (element is SecurityBindingElement) { sbe = element as SecurityBindingElement; } else if (element is TransportBindingElement) { transport = element as HttpTransportBindingElement; } else if (element is MessageEncodingBindingElement) { encoding = element as MessageEncodingBindingElement; } else if (element is TransactionFlowBindingElement) { txFlow = element as TransactionFlowBindingElement; } else if (element is ReliableSessionBindingElement) { session = element as ReliableSessionBindingElement; } else if (element is CompositeDuplexBindingElement) { compositeDuplex = element as CompositeDuplexBindingElement; } else if (element is OneWayBindingElement) { oneWay = element as OneWayBindingElement; } else { return false; } } if (transport == null) { return false; } if (encoding == null) { return false; } // this binding only supports Soap12 if (!encoding.CheckEncodingVersion(EnvelopeVersion.Soap12)) { return false; } if (compositeDuplex == null) { return false; } if (oneWay == null) { return false; } if (session == null) { return false; } if (txFlow == null) { txFlow = GetDefaultTransactionFlowBindingElement(); } WSDualHttpSecurity security; if (!TryCreateSecurity(sbe, out security)) return false; WSDualHttpBinding wSDualHttpBinding = new WSDualHttpBinding(transport, encoding, txFlow, session, compositeDuplex, oneWay, security); if (!wSDualHttpBinding.IsBindingElementsMatch(transport, encoding, txFlow, session, compositeDuplex, oneWay)) { return false; } binding = wSDualHttpBinding; 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
- FixedSOMPageConstructor.cs
- CorrelationManager.cs
- FederatedMessageSecurityOverHttpElement.cs
- RegisteredHiddenField.cs
- XmlElementCollection.cs
- WebDisplayNameAttribute.cs
- ipaddressinformationcollection.cs
- PreviewKeyDownEventArgs.cs
- WebZone.cs
- PassportAuthentication.cs
- PreviewControlDesigner.cs
- SecuritySessionFilter.cs
- InputLanguageProfileNotifySink.cs
- RangeValidator.cs
- COMException.cs
- RoutedCommand.cs
- ImageMetadata.cs
- FaultFormatter.cs
- ServiceDescriptionContext.cs
- FlowSwitch.cs
- ExtensionWindowHeader.cs
- DetailsViewModeEventArgs.cs
- MetabaseReader.cs
- ControlBindingsCollection.cs
- DynamicQueryableWrapper.cs
- StringFormat.cs
- SerializationSectionGroup.cs
- CustomCredentialPolicy.cs
- ArrayTypeMismatchException.cs
- BaseParagraph.cs
- SamlEvidence.cs
- COM2EnumConverter.cs
- TextFormatter.cs
- MailMessageEventArgs.cs
- PopupEventArgs.cs
- BehaviorDragDropEventArgs.cs
- NewArrayExpression.cs
- _FtpDataStream.cs
- TraceEventCache.cs
- TabControlEvent.cs
- SqlProfileProvider.cs
- DynamicDataRoute.cs
- MetadataArtifactLoaderCompositeResource.cs
- LinearGradientBrush.cs
- KeyTime.cs
- KeyValueConfigurationCollection.cs
- ProfileProvider.cs
- Merger.cs
- AttributeCallbackBuilder.cs
- DynamicScriptObject.cs
- NGCSerializerAsync.cs
- ConnectionPoolManager.cs
- OpCodes.cs
- PropertyItemInternal.cs
- ClientTargetCollection.cs
- ToolBar.cs
- mactripleDES.cs
- DefaultProxySection.cs
- ExceptionUtil.cs
- _HTTPDateParse.cs
- EntryWrittenEventArgs.cs
- RestHandlerFactory.cs
- StandardTransformFactory.cs
- SHA256Managed.cs
- UpWmlPageAdapter.cs
- RemoteWebConfigurationHost.cs
- AsymmetricSignatureDeformatter.cs
- SmtpNegotiateAuthenticationModule.cs
- TextBlock.cs
- TdsValueSetter.cs
- SiteMapHierarchicalDataSourceView.cs
- FormatterServices.cs
- RedistVersionInfo.cs
- CodeLabeledStatement.cs
- EffectiveValueEntry.cs
- ReadOnlyCollectionBuilder.cs
- MonthCalendar.cs
- MouseGestureValueSerializer.cs
- XmlSignatureProperties.cs
- DataGridDetailsPresenter.cs
- DataView.cs
- ResolvedKeyFrameEntry.cs
- PipelineModuleStepContainer.cs
- Accessible.cs
- ResizeBehavior.cs
- FontCollection.cs
- ObjectListComponentEditor.cs
- TreeIterator.cs
- TextProperties.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- MemberProjectionIndex.cs
- ViewManager.cs
- _IPv6Address.cs
- ProcessHostMapPath.cs
- SystemIPv6InterfaceProperties.cs
- DefaultClaimSet.cs
- TableDetailsCollection.cs
- SystemException.cs
- ToolboxComponentsCreatingEventArgs.cs
- AnnotationService.cs