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
- XPathNodeHelper.cs
- HashMembershipCondition.cs
- ExtendedPropertiesHandler.cs
- TextWriter.cs
- HandledMouseEvent.cs
- LingerOption.cs
- TextCompositionEventArgs.cs
- AdPostCacheSubstitution.cs
- DataGridViewButtonColumn.cs
- StateRuntime.cs
- HttpException.cs
- TypeBinaryExpression.cs
- indexingfiltermarshaler.cs
- PopupEventArgs.cs
- XmlProcessingInstruction.cs
- FrameSecurityDescriptor.cs
- WebRequestModuleElementCollection.cs
- ToolStripTextBox.cs
- ResolveResponseInfo.cs
- HostingEnvironmentException.cs
- EntityDataSourceDataSelection.cs
- SimpleLine.cs
- UIntPtr.cs
- WindowsGraphics.cs
- ToolboxBitmapAttribute.cs
- xmlsaver.cs
- RubberbandSelector.cs
- ColorBlend.cs
- ListParaClient.cs
- RecognizedPhrase.cs
- InvokerUtil.cs
- DiscardableAttribute.cs
- Nullable.cs
- ThreadStateException.cs
- DummyDataSource.cs
- ConfigXmlElement.cs
- EventsTab.cs
- wgx_commands.cs
- ParserExtension.cs
- GenericRootAutomationPeer.cs
- InternalConfigConfigurationFactory.cs
- RequestCache.cs
- ExpressionEditorAttribute.cs
- ComponentSerializationService.cs
- ConsumerConnectionPointCollection.cs
- RadialGradientBrush.cs
- AutoGeneratedFieldProperties.cs
- ComponentEditorForm.cs
- DataGridViewCellPaintingEventArgs.cs
- ElementFactory.cs
- QilReference.cs
- CompositeActivityCodeGenerator.cs
- BitmapEffectGroup.cs
- SimpleRecyclingCache.cs
- ByeMessageApril2005.cs
- DataControlFieldHeaderCell.cs
- ProxyWebPartManager.cs
- HtmlControlPersistable.cs
- SqlDataSourceView.cs
- PropertyEmitter.cs
- UniqueID.cs
- SqlBulkCopyColumnMappingCollection.cs
- XmlNullResolver.cs
- SymbolEqualComparer.cs
- SerialPinChanges.cs
- CodeNamespace.cs
- WebHttpEndpoint.cs
- ValidatingCollection.cs
- AppSecurityManager.cs
- PropertyEmitterBase.cs
- SymDocumentType.cs
- NameScope.cs
- StackSpiller.Bindings.cs
- CommonGetThemePartSize.cs
- ExtractedStateEntry.cs
- DynamicQueryableWrapper.cs
- CodeStatementCollection.cs
- DynamicPropertyHolder.cs
- FlowPosition.cs
- SamlSerializer.cs
- NegatedConstant.cs
- TextLineResult.cs
- TextWriterTraceListener.cs
- PeerCustomResolverElement.cs
- CompressEmulationStream.cs
- _OverlappedAsyncResult.cs
- ReadingWritingEntityEventArgs.cs
- QueryAccessibilityHelpEvent.cs
- CompositeCollectionView.cs
- WebBodyFormatMessageProperty.cs
- ControlPaint.cs
- XsdDateTime.cs
- BuiltInExpr.cs
- AuditLevel.cs
- RegistrySecurity.cs
- FileUpload.cs
- BuildProvider.cs
- TdsRecordBufferSetter.cs
- XmlQueryCardinality.cs
- FlowLayout.cs