/// <summary>
        /// Configures the endpoint for the specified URI
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="uri"></param>
        /// <param name="configureCallback"></param>
        public static T ConfigureEndpoint <T>(this T configurator, Uri uri,
                                              Action <IEndpointConfigurator> configureCallback)
            where T : IEndpointFactoryConfigurator
        {
            IEndpointConfigurator endpointConfigurator = configurator.ConfigureEndpoint(uri);

            configureCallback(endpointConfigurator);

            return(configurator);
        }
        /// <summary>
        /// Configures the endpoint for the specified endpoint URI
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="uriString"></param>
        /// <param name="configureCallback"></param>
        /// <returns></returns>
        public static T ConfigureEndpoint <T>(this T configurator, string uriString,
                                              Action <IEndpointConfigurator> configureCallback)
            where T : IEndpointFactoryConfigurator
        {
            IEndpointConfigurator endpointConfigurator =
                configurator.ConfigureEndpoint(uriString.ToUri("The configure endpoint URI is invalid"));

            configureCallback(endpointConfigurator);

            return(configurator);
        }
 /// <summary>
 /// Overrides the default error address with a new error address
 /// </summary>
 /// <returns></returns>
 public static IEndpointConfigurator SetErrorAddress(this IEndpointConfigurator configurator, string uriString)
 {
     return(configurator.SetErrorAddress(uriString.ToUri("Error URI was not valid")));
 }
 /// <summary>
 /// Specifies a null transport for error messages
 /// </summary>
 /// <param name="configurator"></param>
 public static IEndpointConfigurator DiscardFaultingMessages(this IEndpointConfigurator configurator)
 {
     return(configurator.SetErrorTransportFactory((factory, settings) => new NullOutboundTransport(settings.Address)));
 }
 /// <summary>
 /// Specify a serializer for this endpoint (overrides the default)
 /// </summary>
 /// <param name="configurator"></param>
 /// <param name="serializerType"></param>
 public static IEndpointConfigurator UseSerializer(this IEndpointConfigurator configurator, Type serializerType)
 {
     return(configurator.UseSerializer((IMessageSerializer)FastActivator.Create(serializerType)));
 }
 /// <summary>
 /// Specify a serializer for this endpoint (overrides the default)
 /// </summary>
 /// <typeparam name="TSerializer"></typeparam>
 public static IEndpointConfigurator UseSerializer <TSerializer>(this IEndpointConfigurator configurator)
     where TSerializer : IMessageSerializer, new()
 {
     return(configurator.UseSerializer(new TSerializer()));
 }