Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / BasicHttpBinding.cs / 1 / BasicHttpBinding.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; using System.ServiceModel.Security.Tokens; public class BasicHttpBinding : Binding, IBindingRuntimePreferences { WSMessageEncoding messageEncoding; // private BindingElements HttpTransportBindingElement httpTransport; HttpsTransportBindingElement httpsTransport; TextMessageEncodingBindingElement textEncoding; MtomMessageEncodingBindingElement mtomEncoding; BasicHttpSecurity security = new BasicHttpSecurity(); public BasicHttpBinding() : this(BasicHttpSecurityMode.None) { } public BasicHttpBinding(string configurationName) : this() { ApplyConfiguration(configurationName); } public BasicHttpBinding(BasicHttpSecurityMode securityMode) : base() { Initialize(); this.security.Mode = securityMode; } BasicHttpBinding(BasicHttpSecurity security) : base() { Initialize(); this.security = security; } public bool AllowCookies { get { return httpTransport.AllowCookies; } set { httpTransport.AllowCookies = value; httpsTransport.AllowCookies = value; } } public bool BypassProxyOnLocal { get { return httpTransport.BypassProxyOnLocal; } set { httpTransport.BypassProxyOnLocal = value; httpsTransport.BypassProxyOnLocal = value; } } public HostNameComparisonMode HostNameComparisonMode { get { return httpTransport.HostNameComparisonMode; } set { httpTransport.HostNameComparisonMode = value; httpsTransport.HostNameComparisonMode = value; } } public int MaxBufferSize { get { return httpTransport.MaxBufferSize; } set { httpTransport.MaxBufferSize = value; httpsTransport.MaxBufferSize = value; mtomEncoding.MaxBufferSize = value; } } public long MaxBufferPoolSize { get { return httpTransport.MaxBufferPoolSize; } set { httpTransport.MaxBufferPoolSize = value; httpsTransport.MaxBufferPoolSize = value; } } public long MaxReceivedMessageSize { get { return httpTransport.MaxReceivedMessageSize; } set { httpTransport.MaxReceivedMessageSize = value; httpsTransport.MaxReceivedMessageSize = value; } } public WSMessageEncoding MessageEncoding { get { return messageEncoding; } set { messageEncoding = value; } } public Uri ProxyAddress { get { return httpTransport.ProxyAddress; } set { httpTransport.ProxyAddress = value; httpsTransport.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 override string Scheme { get { return GetTransport().Scheme; } } public BasicHttpSecurity Security { get { return this.security; } } public EnvelopeVersion EnvelopeVersion { get { return EnvelopeVersion.Soap11; } } public System.Text.Encoding TextEncoding { get { return textEncoding.WriteEncoding; } set { textEncoding.WriteEncoding = value; mtomEncoding.WriteEncoding = value; } } public TransferMode TransferMode { get { return httpTransport.TransferMode; } set { httpTransport.TransferMode = value; httpsTransport.TransferMode = value; } } public bool UseDefaultWebProxy { get { return httpTransport.UseDefaultWebProxy; } set { httpTransport.UseDefaultWebProxy = value; httpsTransport.UseDefaultWebProxy = value; } } bool IBindingRuntimePreferences.ReceiveSynchronously { get { return false; } } void Initialize() { httpTransport = new HttpTransportBindingElement(); httpsTransport = new HttpsTransportBindingElement(); messageEncoding = WSMessageEncoding.Text; textEncoding = new TextMessageEncodingBindingElement(); textEncoding.MessageVersion = MessageVersion.Soap11; mtomEncoding = new MtomMessageEncodingBindingElement(); mtomEncoding.MessageVersion = MessageVersion.Soap11; } // check that properties of the HttpTransportBindingElement and // MessageEncodingBindingElement not exposed as properties on BasicHttpBinding // match default values of the binding elements bool IsBindingElementsMatch(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding) { 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.GetTransport().IsMatch(transport)) return false; return true; } void InitializeFrom(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding) { this.BypassProxyOnLocal = transport.BypassProxyOnLocal; this.HostNameComparisonMode = transport.HostNameComparisonMode; this.MaxBufferPoolSize = transport.MaxBufferPoolSize; this.MaxBufferSize = transport.MaxBufferSize; this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize; this.ProxyAddress = transport.ProxyAddress; this.TransferMode = transport.TransferMode; this.UseDefaultWebProxy = transport.UseDefaultWebProxy; // BasicHttpBinding 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; } } void ApplyConfiguration(string configurationName) { BasicHttpBindingCollectionElement section = BasicHttpBindingCollectionElement.GetBindingCollectionElement(); BasicHttpBindingElement element = section.Bindings[configurationName]; if (element == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException( SR.GetString(SR.ConfigInvalidBindingConfigurationName, configurationName, ConfigurationStrings.BasicHttpBindingCollectionElementName))); } else { element.ApplyConfiguration(this); } } public override BindingElementCollection CreateBindingElements() { // return collection of BindingElements BindingElementCollection bindingElements = new BindingElementCollection(); // order of BindingElements is important // add security (*optional) SecurityBindingElement wsSecurity = this.CreateMessageSecurity(); if (wsSecurity != null) { bindingElements.Add(wsSecurity); } // 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 (http or https) bindingElements.Add(GetTransport()); return bindingElements.Clone(); } internal static bool TryCreate(BindingElementCollection elements, out Binding binding) { binding = null; if (elements.Count > 3) return false; SecurityBindingElement securityElement = null; MessageEncodingBindingElement encoding = null; HttpTransportBindingElement transport = null; foreach(BindingElement element in elements) { if (element is SecurityBindingElement) securityElement = element as SecurityBindingElement; else if (element is TransportBindingElement) transport = element as HttpTransportBindingElement; else if (element is MessageEncodingBindingElement) encoding = element as MessageEncodingBindingElement; else return false; } // process transport binding element UnifiedSecurityMode mode; HttpTransportSecurity transportSecurity = new HttpTransportSecurity(); if (!GetSecurityModeFromTransport(transport, transportSecurity, out mode)) return false; if (encoding == null) return false; // BasicHttpBinding only supports Soap11 if (!encoding.CheckEncodingVersion(EnvelopeVersion.Soap11)) return false; BasicHttpSecurity security; if (!TryCreateSecurity(securityElement, mode, transportSecurity, out security)) return false; BasicHttpBinding basicHttpBinding = new BasicHttpBinding(security); basicHttpBinding.InitializeFrom(transport, encoding); // make sure all our defaults match if (!basicHttpBinding.IsBindingElementsMatch(transport, encoding)) return false; binding = basicHttpBinding; return true; } TransportBindingElement GetTransport() { if (security.Mode == BasicHttpSecurityMode.Transport || security.Mode == BasicHttpSecurityMode.TransportWithMessageCredential) { security.EnableTransportSecurity(httpsTransport); return httpsTransport; } else if (security.Mode == BasicHttpSecurityMode.TransportCredentialOnly) { security.EnableTransportAuthentication(httpTransport); return httpTransport; } else { // ensure that there is no transport security security.DisableTransportAuthentication(httpTransport); return httpTransport; } } static bool GetSecurityModeFromTransport(HttpTransportBindingElement http, HttpTransportSecurity transportSecurity, out UnifiedSecurityMode mode) { mode = UnifiedSecurityMode.None; if (http == null) return false; if (http is HttpsTransportBindingElement) { mode = UnifiedSecurityMode.Transport | UnifiedSecurityMode.TransportWithMessageCredential; BasicHttpSecurity.EnableTransportSecurity((HttpsTransportBindingElement)http, transportSecurity); } else if (HttpTransportSecurity.IsDisabledTransportAuthentication(http)) { mode = UnifiedSecurityMode.Message | UnifiedSecurityMode.None; } else if (!BasicHttpSecurity.IsEnabledTransportAuthentication(http, transportSecurity)) { return false; } else { mode = UnifiedSecurityMode.TransportCredentialOnly; } return true; } SecurityBindingElement CreateMessageSecurity() { return security.CreateMessageSecurity(); } static bool TryCreateSecurity(SecurityBindingElement securityElement, UnifiedSecurityMode mode, HttpTransportSecurity transportSecurity, out BasicHttpSecurity security) { return BasicHttpSecurity.TryCreate(securityElement, mode, transportSecurity, out security); } } } // 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
- HotSpotCollection.cs
- DiscoveryEndpoint.cs
- SqlDataSourceAdvancedOptionsForm.cs
- TextEvent.cs
- ConvertersCollection.cs
- SimpleHandlerBuildProvider.cs
- ValidationResult.cs
- ConsumerConnectionPointCollection.cs
- ThreadStaticAttribute.cs
- ProtocolsSection.cs
- DoubleCollectionConverter.cs
- TrustSection.cs
- LayoutTable.cs
- StructuredTypeEmitter.cs
- StreamReader.cs
- IResourceProvider.cs
- SatelliteContractVersionAttribute.cs
- ListViewHitTestInfo.cs
- Signature.cs
- SqlConnectionPoolProviderInfo.cs
- HttpRequest.cs
- Profiler.cs
- ProfileManager.cs
- DataGridViewRowsAddedEventArgs.cs
- SingleBodyParameterMessageFormatter.cs
- SoapBinding.cs
- InstanceView.cs
- WindowHelperService.cs
- DictationGrammar.cs
- XamlContextStack.cs
- UserControlAutomationPeer.cs
- ProxyHwnd.cs
- LayoutEngine.cs
- Drawing.cs
- NativeMethods.cs
- RuntimeIdentifierPropertyAttribute.cs
- ResolveDuplexCD1AsyncResult.cs
- HandlerWithFactory.cs
- safex509handles.cs
- XmlJsonWriter.cs
- DateTimeEditor.cs
- DefaultMemberAttribute.cs
- XmlAttributeOverrides.cs
- HtmlElementErrorEventArgs.cs
- DesigntimeLicenseContextSerializer.cs
- EqualityComparer.cs
- MessageSecurityOverMsmq.cs
- GCHandleCookieTable.cs
- AttributeQuery.cs
- XmlSchemaChoice.cs
- TreeViewItem.cs
- NativeMethods.cs
- PropertyKey.cs
- QueryOperationResponseOfT.cs
- HiddenFieldPageStatePersister.cs
- MenuItemBinding.cs
- ThreadStartException.cs
- DataListItem.cs
- TextReader.cs
- AlgoModule.cs
- MultiPartWriter.cs
- SpecialFolderEnumConverter.cs
- OdbcConnectionString.cs
- SerializationEventsCache.cs
- JavaScriptSerializer.cs
- Message.cs
- ConfigPathUtility.cs
- AnimatedTypeHelpers.cs
- KoreanCalendar.cs
- FloatUtil.cs
- ComponentEditorPage.cs
- LinqDataSourceView.cs
- DoubleLinkList.cs
- CryptographicAttribute.cs
- XmlDeclaration.cs
- RightsManagementProvider.cs
- ElementHost.cs
- UnsafeNativeMethods.cs
- PackageRelationship.cs
- BindingCompleteEventArgs.cs
- RoleBoolean.cs
- MouseButton.cs
- OdbcError.cs
- OdbcCommandBuilder.cs
- UnsafeNativeMethods.cs
- MouseBinding.cs
- CommonObjectSecurity.cs
- oledbconnectionstring.cs
- ResourceDisplayNameAttribute.cs
- ListMarkerSourceInfo.cs
- ImageCodecInfoPrivate.cs
- DES.cs
- ArrayWithOffset.cs
- cache.cs
- DataSpaceManager.cs
- XmlAutoDetectWriter.cs
- ViewStateModeByIdAttribute.cs
- Misc.cs
- BypassElementCollection.cs
- OutputCacheProfileCollection.cs