File: System\ServiceModel\Endpoint.cs
Project: ndp\cdf\src\NetFx40\System.ServiceModel.Activities\System.ServiceModel.Activities.csproj (System.ServiceModel.Activities)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
 
namespace System.ServiceModel
{
    using System;
    using System.Collections.ObjectModel;
    using System.ComponentModel;
    using System.Runtime;
    using System.ServiceModel.Activities;
    using System.ServiceModel.Channels;
    using System.ServiceModel.XamlIntegration;
    using System.Xml.Linq;
    using SMASR = System.ServiceModel.Activities.SR;
 
    public class Endpoint
    {
        Collection<AddressHeader> headers;
 
        [DefaultValue(null)]
        public string BehaviorConfigurationName
        {
            get;
            set;
        }
 
        [Fx.Tag.KnownXamlExternal]
        [DefaultValue(null)]
        public Binding Binding
        {
            get;
            set;
        }
 
        [DefaultValue(null)]
        [TypeConverter(typeof(ServiceXNameTypeConverter))]
        public XName ServiceContractName
        {
            get;
            set;
        }
 
        // concrete AddressHeader descendants aren't currently XAMLable, they are not initialized until runtime
        // If user adds an address header, this object will fail to xamlize. 
        [Fx.Tag.KnownXamlExternal]
        public Collection<AddressHeader> Headers
        {
            get
            {
                if (this.headers == null)
                {
                    this.headers = new Collection<AddressHeader>();
                }
                return this.headers;
            }
        }
 
        [DefaultValue(null)]
        [TypeConverter(typeof(EndpointIdentityConverter))]
        public EndpointIdentity Identity
        {
            get;
            set;
        }
 
        [DefaultValue(null)]
        public Uri ListenUri
        {
            get;
            set;
        }
 
        [DefaultValue(null)]
        public string Name
        {
            get;
            set;
        }
 
        [DefaultValue(null)]
        public Uri AddressUri
        {
            get;
            set;
        }
 
        public EndpointAddress GetAddress()
        {
            return GetAddress(null);
        }
 
        public EndpointAddress GetAddress(ServiceHostBase host)
        {
            if (this.AddressUri == null)
            {
                string endpointName = ContractValidationHelper.GetErrorMessageEndpointName(this.Name);
                string contractName = ContractValidationHelper.GetErrorMessageEndpointServiceContractName(this.ServiceContractName);
                throw FxTrace.Exception.AsError(new InvalidOperationException(
                    SMASR.MissingUriInEndpoint(endpointName, contractName)));
            }
 
            Uri address = null;
            if (this.AddressUri.IsAbsoluteUri)
            {
                address = this.AddressUri;
            }
            else
            {
                if (this.Binding == null)
                {
                    string endpointName = ContractValidationHelper.GetErrorMessageEndpointName(this.Name);
                    string contractName = ContractValidationHelper.GetErrorMessageEndpointServiceContractName(this.ServiceContractName);
                    throw FxTrace.Exception.AsError(new InvalidOperationException(
                        SMASR.RelativeUriRequiresBinding(endpointName, contractName, this.AddressUri)));
                }
                if (host == null)
                {
                    string endpointName = ContractValidationHelper.GetErrorMessageEndpointName(this.Name);
                    string contractName = ContractValidationHelper.GetErrorMessageEndpointServiceContractName(this.ServiceContractName);
                    throw FxTrace.Exception.AsError(new InvalidOperationException(
                        SMASR.RelativeUriRequiresHost(endpointName, contractName, this.AddressUri)));
                }
                address = host.MakeAbsoluteUri(this.AddressUri, this.Binding);
            }
 
            return new EndpointAddress(address, this.Identity, new AddressHeaderCollection(this.Headers));
        }
    }
}