DiscoveryClientBindingElement.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Discovery / System / ServiceModel / Discovery / DiscoveryClientBindingElement.cs / 1305376 / DiscoveryClientBindingElement.cs

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

namespace System.ServiceModel.Discovery 
{
    using System.Diagnostics.CodeAnalysis; 
    using System.Runtime; 
    using System.ServiceModel;
    using System.ServiceModel.Channels; 
    using System.ServiceModel.Description;


    [Fx.Tag.XamlVisible(false)] 
    sealed public class DiscoveryClientBindingElement : BindingElement
    { 
        [SuppressMessage(FxCop.Category.Security, FxCop.Rule.DoNotDeclareReadOnlyMutableReferenceTypes, Justification = "EndpointAddress is an immutable type.")] 
        public static readonly EndpointAddress DiscoveryEndpointAddress = new EndpointAddress("http://schemas.microsoft.com/discovery/dynamic");
 
        DiscoveryEndpointProvider discoveryEndpointProvider;
        FindCriteria findCriteria;

        public DiscoveryClientBindingElement() 
        {
            this.FindCriteria = new FindCriteria(); 
            this.DiscoveryEndpointProvider = new UdpDiscoveryEndpointProvider(); 
        }
 
        public DiscoveryClientBindingElement(DiscoveryEndpointProvider discoveryEndpointProvider, FindCriteria findCriteria)
        {
            if (discoveryEndpointProvider == null)
            { 
                throw FxTrace.Exception.ArgumentNull("discoveryEndpointProvider");
            } 
 
            if (findCriteria == null)
            { 
                throw FxTrace.Exception.ArgumentNull("findCriteria");
            }

            this.findCriteria = findCriteria; 
            this.discoveryEndpointProvider = discoveryEndpointProvider;
        } 
 
        private DiscoveryClientBindingElement(DiscoveryClientBindingElement elementToBeCloned)
            : base(elementToBeCloned) 
        {
            this.discoveryEndpointProvider = elementToBeCloned.DiscoveryEndpointProvider;
            this.findCriteria = elementToBeCloned.FindCriteria.Clone();;
        } 

        public DiscoveryEndpointProvider DiscoveryEndpointProvider 
        { 
            get
            { 
                return this.discoveryEndpointProvider;
            }
            set
            { 
                if (value == null)
                { 
                    throw FxTrace.Exception.ArgumentNull("value"); 
                }
 
                this.discoveryEndpointProvider = value;
            }
        }
 
        public FindCriteria FindCriteria
        { 
            get 
            {
                return this.findCriteria; 
            }
            set
            {
                if (value == null) 
                {
                    throw FxTrace.Exception.ArgumentNull("value"); 
                } 
                this.findCriteria = value;
            } 
        }

        public override bool CanBuildChannelFactory(BindingContext context)
        { 
            if (context == null)
            { 
                throw FxTrace.Exception.ArgumentNull("context"); 
            }
 
            if (typeof(TChannel) == typeof(IOutputChannel)
                || typeof(TChannel) == typeof(IDuplexChannel)
                || typeof(TChannel) == typeof(IRequestChannel)
                || typeof(TChannel) == typeof(IOutputSessionChannel) 
                || typeof(TChannel) == typeof(IRequestSessionChannel)
                || typeof(TChannel) == typeof(IDuplexSessionChannel)) 
            { 
                return context.CanBuildInnerChannelFactory();
            } 

            return false;
        }
 
        public override IChannelFactory BuildChannelFactory(BindingContext context)
        { 
            if (context == null) 
            {
                throw FxTrace.Exception.ArgumentNull("context"); 
            }

            if (context.Binding.Elements.IndexOf(this) != 0)
            { 
                throw FxTrace.Exception.AsError(new InvalidOperationException(SR.DiscoveryClientBindingElementNotFirst));
            } 
 
            if (this.CanBuildChannelFactory(context))
            { 
                return new DiscoveryClientChannelFactory(
                    context.BuildInnerChannelFactory(),
                    this.FindCriteria,
                    this.DiscoveryEndpointProvider); 
            }
            else 
            { 
                throw FxTrace.Exception.Argument("TChannel", ServiceModel.SR.GetString(ServiceModel.SR.ChannelTypeNotSupported, typeof(TChannel)));
            } 
        }

        public override bool CanBuildChannelListener(BindingContext context)
        { 
            if (context == null)
            { 
                throw FxTrace.Exception.ArgumentNull("context"); 
            }
 
            return false;
        }

        public override IChannelListener BuildChannelListener(BindingContext context) 
        {
            if (context == null) 
            { 
                throw FxTrace.Exception.ArgumentNull("context");
            } 

            throw FxTrace.Exception.Argument("TChannel", ServiceModel.SR.GetString(ServiceModel.SR.ChannelTypeNotSupported, typeof(TChannel)));
        }
 
        public override BindingElement Clone()
        { 
            return new DiscoveryClientBindingElement(this); 
        }
 
        public override T GetProperty(BindingContext context)
        {
            if (context == null)
            { 
                throw FxTrace.Exception.ArgumentNull("context");
            } 
 
            return context.GetInnerProperty();
        } 
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.


                        

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