PeerCustomResolverBindingElement.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 / WCF / ServiceModel / System / ServiceModel / Channels / PeerCustomResolverBindingElement.cs / 1 / PeerCustomResolverBindingElement.cs

                            //------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------

namespace System.ServiceModel.Channels 
{
    using System.ComponentModel; 
    using System.ServiceModel; 
    using System.ServiceModel.Configuration;
    using System.ServiceModel.Description; 
    using System.ServiceModel.Dispatcher;
    using System.ServiceModel.PeerResolvers;

 
    public sealed class PeerCustomResolverBindingElement : PeerResolverBindingElement
    { 
        EndpointAddress address; 
        Binding binding;
        string bindingSection, bindingConfiguration; 
        //this should be PeerCustomResolver?
        PeerResolver resolver;
        ClientCredentials credentials;
        PeerReferralPolicy referralPolicy; 

        public PeerCustomResolverBindingElement() { } 
        public PeerCustomResolverBindingElement(PeerCustomResolverBindingElement other) : base(other) 
        {
           this.address = other.address; 
           this.bindingConfiguration= other.bindingConfiguration;
           this.bindingSection = other.bindingSection;
           this.binding = other.binding;
           this.resolver = other.resolver; 
           this.credentials = other.credentials;
        } 
 
        public PeerCustomResolverBindingElement(PeerCustomResolverSettings settings)
        { 
            if(settings != null)
            {
                this.address = settings.Address;
                this.binding = settings.Binding; 
                this.resolver = settings.Resolver;
                this.bindingConfiguration = settings.BindingConfiguration; 
                this.bindingSection = settings.BindingSection; 
            }
        } 

        public PeerCustomResolverBindingElement(BindingContext context, PeerCustomResolverSettings settings):this(settings)
        {
            if (context == null) 
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("context"));
 
#pragma warning suppress 56506 // 
            credentials = context.BindingParameters.Find();
        } 
        public override T GetProperty(System.ServiceModel.Channels.BindingContext context)
        {
#pragma warning suppress 56506 //
            return context.GetInnerProperty(); 
        }
        public EndpointAddress Address 
        { 
            get
            { 
                return address;
            }
            set
            { 
                address = value;
            } 
        } 

        public Binding Binding 
        {
            get
            {
                return binding; 
            }
            set 
            { 
                binding = value;
            } 
        }

        public override PeerReferralPolicy ReferralPolicy
        { 
            get
            { 
                return referralPolicy; 
            }
            set 
            {
                if(!PeerReferralPolicyHelper.IsDefined(value))
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidEnumArgumentException("value", (int)value, typeof(PeerReferralPolicy))); 
                }
                referralPolicy = value; 
            } 
        }
 
        public override BindingElement Clone()
        {
            return new PeerCustomResolverBindingElement(this);
        } 

        public override IChannelFactory BuildChannelFactory(BindingContext context) 
        { 
            if (context == null)
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("context")); 

#pragma warning suppress 56506 //
            context.BindingParameters.Add(this);
            credentials = context.BindingParameters.Find(); 
            return context.BuildInnerChannelFactory();
        } 
 
        public override bool CanBuildChannelFactory(BindingContext context)
        { 
            if (context == null)
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("context"));
#pragma warning suppress 56506 //
            this.credentials = context.BindingParameters.Find(); 
            context.BindingParameters.Add(this);
            return context.CanBuildInnerChannelFactory(); 
        } 

        public override IChannelListener BuildChannelListener(BindingContext context) 
        {
            if (context == null)
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("context"));
 
#pragma warning suppress 56506 //
            context.BindingParameters.Add(this); 
            this.credentials = context.BindingParameters.Find(); 
            return context.BuildInnerChannelListener();
        } 

        public override bool CanBuildChannelListener(BindingContext context)
        {
            if (context == null) 
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("context"));
#pragma warning suppress 56506 // 
            this.credentials = context.BindingParameters.Find(); 
            context.BindingParameters.Add(this);
            return context.CanBuildInnerChannelListener(); 
        }

        public override PeerResolver CreatePeerResolver()
        { 
            if(resolver == null)
            { 
                if(address == null || ((binding == null) && (String.IsNullOrEmpty(this.bindingSection) || String.IsNullOrEmpty(this.bindingConfiguration)))) 
                    PeerExceptionHelper.ThrowArgument_InsufficientResolverSettings();
                if (binding == null) 
                {
                    this.binding = ConfigLoader.LookupBinding(this.bindingSection, this.bindingConfiguration);
                    if (binding == null)
                        PeerExceptionHelper.ThrowArgument_InsufficientResolverSettings(); 
                }
                resolver = new PeerDefaultCustomResolverClient(); 
            } 
            if (resolver != null)
            { 
                resolver.Initialize(address, binding, credentials, this.referralPolicy);
                if (resolver is PeerDefaultCustomResolverClient)
                {
                    (resolver as PeerDefaultCustomResolverClient).BindingName = this.bindingSection; 
                    (resolver as PeerDefaultCustomResolverClient).BindingConfigurationName = this.bindingConfiguration;
                } 
            } 
            return resolver;
        } 
    }
}


// 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