WebHttpBinding.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / NetFx35 / System.ServiceModel.Web / System / ServiceModel / WebHttpBinding.cs / 1 / WebHttpBinding.cs

                            //------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------
namespace System.ServiceModel
{ 
    using System;
    using System.Configuration; 
    using System.ServiceModel.Channels; 
    using System.ServiceModel.Configuration;
    using System.ServiceModel.Description; 
    using System.Text;
    using System.Xml;

    public class WebHttpBinding : Binding, IBindingRuntimePreferences 
    {
        HttpsTransportBindingElement httpsTransportBindingElement; 
        // private BindingElements 
        HttpTransportBindingElement httpTransportBindingElement;
        WebHttpSecurity security = new WebHttpSecurity(); 
        WebMessageEncodingBindingElement webMessageEncodingBindingElement;

        public WebHttpBinding() : this(WebHttpSecurityMode.None)
        { 
        }
 
        public WebHttpBinding(string configurationName) : this() 
        {
            ApplyConfiguration(configurationName); 
        }

        public WebHttpBinding(WebHttpSecurityMode securityMode) : base()
        { 
            Initialize();
            this.security.Mode = securityMode; 
        } 

        public bool AllowCookies 
        {
            get { return httpTransportBindingElement.AllowCookies; }
            set
            { 
                httpTransportBindingElement.AllowCookies = value;
                httpsTransportBindingElement.AllowCookies = value; 
            } 
        }
 
        public bool BypassProxyOnLocal
        {
            get { return httpTransportBindingElement.BypassProxyOnLocal; }
            set 
            {
                httpTransportBindingElement.BypassProxyOnLocal = value; 
                httpsTransportBindingElement.BypassProxyOnLocal = value; 
            }
        } 

        public EnvelopeVersion EnvelopeVersion
        {
            get { return EnvelopeVersion.None; } 
        }
 
        public HostNameComparisonMode HostNameComparisonMode 
        {
            get { return httpTransportBindingElement.HostNameComparisonMode; } 
            set
            {
                httpTransportBindingElement.HostNameComparisonMode = value;
                httpsTransportBindingElement.HostNameComparisonMode = value; 
            }
        } 
 
        public long MaxBufferPoolSize
        { 
            get { return httpTransportBindingElement.MaxBufferPoolSize; }
            set
            {
                httpTransportBindingElement.MaxBufferPoolSize = value; 
                httpsTransportBindingElement.MaxBufferPoolSize = value;
            } 
        } 

        public int MaxBufferSize 
        {
            get { return httpTransportBindingElement.MaxBufferSize; }
            set
            { 
                httpTransportBindingElement.MaxBufferSize = value;
                httpsTransportBindingElement.MaxBufferSize = value; 
            } 
        }
 
        public long MaxReceivedMessageSize
        {
            get { return httpTransportBindingElement.MaxReceivedMessageSize; }
            set 
            {
                httpTransportBindingElement.MaxReceivedMessageSize = value; 
                httpsTransportBindingElement.MaxReceivedMessageSize = value; 
            }
        } 

        public Uri ProxyAddress
        {
            get { return httpTransportBindingElement.ProxyAddress; } 
            set
            { 
                httpTransportBindingElement.ProxyAddress = value; 
                httpsTransportBindingElement.ProxyAddress = value;
            } 
        }

        public XmlDictionaryReaderQuotas ReaderQuotas
        { 
            get { return webMessageEncodingBindingElement.ReaderQuotas; }
            set 
            { 
                if (value == null)
                { 
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
                }
                value.CopyTo(webMessageEncodingBindingElement.ReaderQuotas);
            } 
        }
 
        public override string Scheme 
        { get { return GetTransport().Scheme; } }
 
        public WebHttpSecurity Security
        {
            get { return this.security; }
        } 

        public TransferMode TransferMode 
        { 
            get { return httpTransportBindingElement.TransferMode; }
            set 
            {
                httpTransportBindingElement.TransferMode = value;
                httpsTransportBindingElement.TransferMode = value;
            } 
        }
 
        public bool UseDefaultWebProxy 
        {
            get { return httpTransportBindingElement.UseDefaultWebProxy; } 
            set
            {
                httpTransportBindingElement.UseDefaultWebProxy = value;
                httpsTransportBindingElement.UseDefaultWebProxy = value; 
            }
        } 
 
        public Encoding WriteEncoding
        { 
            get { return webMessageEncodingBindingElement.WriteEncoding; }
            set
            {
                webMessageEncodingBindingElement.WriteEncoding = value; 
            }
        } 
 
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")] // [....], This is the pattern we use on the standard bindings in Indigo V1
        bool IBindingRuntimePreferences.ReceiveSynchronously 
        {
            get { return false; }
        }
 
        public override BindingElementCollection CreateBindingElements()
        { 
            // return collection of BindingElements 
            BindingElementCollection bindingElements = new BindingElementCollection();
            // order of BindingElements is important 
            // add encoding
            bindingElements.Add(webMessageEncodingBindingElement);
            // add transport (http or https)
            bindingElements.Add(GetTransport()); 

            return bindingElements.Clone(); 
        } 

        void ApplyConfiguration(string configurationName) 
        {
            WebHttpBindingCollectionElement section = WebHttpBindingCollectionElement.GetBindingCollectionElement();
            WebHttpBindingElement element = section.Bindings[configurationName];
            if (element == null) 
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException( 
                    SR2.GetString(SR2.ConfigInvalidBindingConfigurationName, 
                    configurationName,
                    WebHttpBindingConfigurationStrings.WebHttpBindingCollectionElementName))); 
            }
            else
            {
                element.ApplyConfiguration(this); 
            }
        } 
 
        TransportBindingElement GetTransport()
        { 
            if (security.Mode == WebHttpSecurityMode.Transport)
            {
                security.EnableTransportSecurity(httpsTransportBindingElement);
                return httpsTransportBindingElement; 
            }
            else if (security.Mode == WebHttpSecurityMode.TransportCredentialOnly) 
            { 
                security.EnableTransportAuthentication(httpTransportBindingElement);
                return httpTransportBindingElement; 
            }
            else
            {
                // ensure that there is no transport security 
                security.DisableTransportAuthentication(httpTransportBindingElement);
                return httpTransportBindingElement; 
            } 
        }
 
        void Initialize()
        {
            httpTransportBindingElement = new HttpTransportBindingElement();
            httpsTransportBindingElement = new HttpsTransportBindingElement(); 
            httpTransportBindingElement.ManualAddressing = true;
            httpsTransportBindingElement.ManualAddressing = true; 
            webMessageEncodingBindingElement = new WebMessageEncodingBindingElement(); 
            webMessageEncodingBindingElement.MessageVersion = MessageVersion.None;
        } 

        internal static class WebHttpBindingConfigurationStrings
        {
            internal const string WebHttpBindingCollectionElementName = "webHttpBinding"; 
        }
    } 
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK