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
- SortDescription.cs
- ChannelSettingsElement.cs
- FileSecurity.cs
- WebPartMenuStyle.cs
- MachineKeyConverter.cs
- RequestSecurityTokenForRemoteTokenFactory.cs
- ImageMap.cs
- DataGrid.cs
- DoubleAnimationUsingPath.cs
- OperandQuery.cs
- SortKey.cs
- Composition.cs
- PartialArray.cs
- MenuStrip.cs
- ExtensionFile.cs
- input.cs
- SearchForVirtualItemEventArgs.cs
- XsltSettings.cs
- Stack.cs
- ActiveXHost.cs
- AnimationLayer.cs
- PropertyEntry.cs
- Drawing.cs
- ClrProviderManifest.cs
- GridItemPattern.cs
- StatusBarPanel.cs
- DispatcherOperation.cs
- MappingException.cs
- ConstraintEnumerator.cs
- GridViewUpdateEventArgs.cs
- UpDownBase.cs
- PropertyTabAttribute.cs
- XPathItem.cs
- RegisteredArrayDeclaration.cs
- VisualBasicHelper.cs
- ToReply.cs
- NavigationPropertyEmitter.cs
- PropertySegmentSerializer.cs
- Exceptions.cs
- EdgeProfileValidation.cs
- QilFunction.cs
- NavigatingCancelEventArgs.cs
- PersonalizationProviderCollection.cs
- CompositeScriptReference.cs
- ObjectQuery_EntitySqlExtensions.cs
- RangeBase.cs
- MailBnfHelper.cs
- UITypeEditor.cs
- ResourceBinder.cs
- DataGridViewCellContextMenuStripNeededEventArgs.cs
- DocumentPage.cs
- DateTimeConverter2.cs
- ButtonStandardAdapter.cs
- BufferModesCollection.cs
- StringFunctions.cs
- DbConnectionPoolCounters.cs
- TextSchema.cs
- XmlNavigatorStack.cs
- NetworkInformationException.cs
- SqlReorderer.cs
- HttpListenerPrefixCollection.cs
- MessageQueueException.cs
- SoapTypeAttribute.cs
- TextContainerHelper.cs
- SystemFonts.cs
- AdapterDictionary.cs
- TextFormatter.cs
- Empty.cs
- CornerRadiusConverter.cs
- FrameworkReadOnlyPropertyMetadata.cs
- ValidationSummary.cs
- ThreadStaticAttribute.cs
- StrokeFIndices.cs
- DependentList.cs
- SynchronizationContext.cs
- AttachedPropertiesService.cs
- FormParameter.cs
- AppLevelCompilationSectionCache.cs
- XmlSiteMapProvider.cs
- EnumerableRowCollection.cs
- OpCopier.cs
- PTUtility.cs
- TrackingServices.cs
- FunctionDescription.cs
- CompilerParameters.cs
- TrackPointCollection.cs
- XmlIlVisitor.cs
- TypographyProperties.cs
- BorderGapMaskConverter.cs
- SystemSounds.cs
- StreamGeometry.cs
- WSAddressing10ProblemHeaderQNameFault.cs
- XmlAttributeAttribute.cs
- DoWorkEventArgs.cs
- ListDictionaryInternal.cs
- HtmlMeta.cs
- Rect3DConverter.cs
- TaskFormBase.cs
- ContainerUtilities.cs
- MarkupCompiler.cs