/// <summary>
        /// Creates a new EndpointCatalog using the section name in the configuration.
        /// </summary>
        /// <returns>
        ///		EndpointCatalog created from the section in the configuration,
        ///		implementing the IEndpointCatalog interface.
        ///	</returns>
        public IEndpointCatalog CreateCatalog()
        {
            EndpointCatalog catalog = null;

            if (endpointSection != null)
            {
                catalog = new EndpointCatalog();

                foreach (EndpointItemElement endpointItem in endpointSection.EndpointItemCollection)
                {
                    Endpoint endpoint = new Endpoint(endpointItem.Name);
                    catalog.SetEndpoint(endpoint);

                    //if an Address exists for the endpoint, must be the default one.
                    if (endpointItem.Address != null)
                    {
                        endpoint.Default = new EndpointConfig(endpointItem.Address);
                        if (endpointItem.UserName != null)
                        {
                            endpoint.Default.Credential.UserName = endpointItem.UserName;
                        }
                        if (endpointItem.Password != null)
                        {
                            endpoint.Default.Credential.Password = endpointItem.Password;
                        }
                        if (endpointItem.Domain != null)
                        {
                            endpoint.Default.Credential.Domain = endpointItem.Domain;
                        }
                    }

                    foreach (NetworkElement network in endpointItem.Networks)
                    {
                        EndpointConfig config = new EndpointConfig(network.Address);
                        endpoint.SetConfiguration(network.Name, config);

                        if (network.UserName != null)
                        {
                            config.Credential.UserName = network.UserName;
                        }
                        if (network.Password != null)
                        {
                            config.Credential.Password = network.Password;
                        }
                        if (network.Domain != null)
                        {
                            config.Credential.Domain = network.Domain;
                        }
                    }
                }
            }

            return(catalog);
        }
        /// <summary>
        /// Sets the endpoint configuration (address and credential) for a network.
        /// </summary>
        /// <param name="networkName">String with the network name.</param>
        /// <param name="endpointConfiguration">EndpointConfig with the address and credential for the network.</param>
        public void SetConfiguration(string networkName, EndpointConfig endpointConfiguration)
        {
            Guard.ArgumentNotNull(endpointConfiguration, "endpointConfiguration");

            if (String.IsNullOrEmpty(networkName))
            {
                throw new ArgumentException("networkName");
            }

            if (String.IsNullOrEmpty(endpointConfiguration.Address))
            {
                throw new ArgumentException("endpointConfiguration.Address");
            }

            if (configurationCatalog.ContainsKey(networkName))
            {
                configurationCatalog.Remove(networkName);
            }

            configurationCatalog.Add(networkName, endpointConfiguration);
        }