/// <summary>
        /// Find an endpoint access point for a given service and of a given use type.
        /// </summary>
        /// <param name="service">The service key or name.</param>
        /// <param name="useType">The use type of the access point</param>
        /// <returns>As access point.</returns>
        public static string FindAccessPointForService(ServiceIdentifier service, AccessPointUseType useType)
        {
            // Precondition.
            if (service == null)
            {
                throw new ArgumentNullException("service", Resources.ExcaptionInvalidServiceIdentifier);
            }

            // Precondition.
            if (string.IsNullOrWhiteSpace(service.Value))
            {
                throw new ArgumentException(Resources.ExceptionInvalidServiceIdentifierValue, "service");
            }

            ////////// Define pre-conditions.
            ////////Contract.Requires<ArgumentNullException>(service != null);
            ////////Contract.Requires<ArgumentException>(!string.IsNullOrWhiteSpace(service.Value));

            // The business service for the given service key or name.
            var businessService = GetBusinessService(service);

            // The binding template for the access point of the given use type for the given business service.
            var bindingTemplate = // Search for the binding template:
                                  // If no business service was found
                                  businessService == null
                    ?             // then indicate that no binding template is available:
                                  default(BindingTemplate)
                    :             // else search the business service for the first binding template for an access point of the required use type.
                                  (from template in businessService.BindingTemplates
                                   where
                                   string.Compare(
                                       template.AccessPoint.UseType,
                                       useType.ToString(),
                                       StringComparison.OrdinalIgnoreCase) == 0
                                   select template).FirstOrDefault();

            // Return the access point value for the given binding template:
            // If no binding template was found
            return(bindingTemplate == default(BindingTemplate)
                       ? // then indicate this
                   string.Empty
                       : // else return the access point value.
                   bindingTemplate.AccessPoint.Text);
        }
        /// <summary>
        /// Find an endpoint access point for a given service provided by a given business entity and of a given use type.
        /// </summary>
        /// <param name="provider">The provider key or name.</param>
        /// <param name="service">The service key or name.</param>
        /// <param name="useType">The use type of the access point</param>
        /// <returns>As access point.</returns>
        public static string FindAccessPointForService(ProviderIdentifier provider, ServiceIdentifier service, AccessPointUseType useType)
        {
            // Precondition.
            if (provider == null)
            {
                throw new ArgumentNullException("provider", Resources.ExceptionInvalidProviderIdentifier);
            }

            // Precondition.
            if (service == null)
            {
                throw new ArgumentNullException("service", Resources.ExcaptionInvalidServiceIdentifier);
            }

            // Precondition.
            if (string.IsNullOrWhiteSpace(provider.Value))
            {
                throw new ArgumentException(Resources.ExceptionInvalidServiceProviderIdentifierValue, "provider");
            }

            // Precondition.
            if (string.IsNullOrWhiteSpace(service.Value))
            {
                throw new ArgumentException(Resources.ExceptionInvalidServiceIdentifierValue, "service");
            }

            ////////// Define pre-conditions
            ////////Contract.Requires<ArgumentNullException>(provider != null);
            ////////Contract.Requires<ArgumentNullException>(service != null);
            ////////Contract.Requires<ArgumentException>(!string.IsNullOrWhiteSpace(provider.Value));
            ////////Contract.Requires<ArgumentException>(!string.IsNullOrWhiteSpace(service.Value));

            // The business entity for the given provider key or name.
            var businessEntity = GetBusinessEntity(provider);

            // The business service of the given name for the given provider.
            var businessService = // Search for the business service:
                                  // If no business entity was provided
                                  businessEntity == default(BusinessEntity)
                    ?             // then indicate that no business service is available:
                                  default(BusinessService)
                    :             // else treat the service value as a name and search for the first business service that has that name...
                                  (from bs in businessEntity.BusinessServices
                                   where
                                   bs.Names.SingleOrDefault(name => string.CompareOrdinal(name.Text, service.Value) == 0) != null
                                   select bs).FirstOrDefault()
                                  ?? // ...and if nothing is found, treat the service value as a key and search for
                                     //       the first business service that has that key.
                                  (from bs in businessEntity.BusinessServices
                                   where string.CompareOrdinal(bs.ServiceKey, service.Value) == 0
                                   select bs).FirstOrDefault();

            // The binding template for the access point of the given use type for the given business service.
            var bindingTemplate = // Get the binding template:
                                  // If no business service was found
                                  businessService == default(BusinessService)
                    ?             // then indicate that no binding template is available:
                                  default(BindingTemplate)
                    :             // else search the business service for the first binding template for an access point of the required use type.
                                  (from template in businessService.BindingTemplates
                                   where
                                   string.Compare(
                                       template.AccessPoint.UseType,
                                       useType.ToString(),
                                       StringComparison.OrdinalIgnoreCase) == 0
                                   select template).FirstOrDefault();

            // Return the access point value for the given binding template:
            // If no binding template was found
            return(bindingTemplate == default(BindingTemplate)
                       ? // then indicate this
                   string.Empty
                       : // else return the access point value.
                   bindingTemplate.AccessPoint.Text);
        }