Ejemplo n.º 1
0
        internal static TEndpoint LookupEndpointFromClientSection <TEndpoint>(string endpointConfigurationName) where TEndpoint : ServiceEndpoint
        {
            Fx.Assert(endpointConfigurationName != null, "The endpointConfigurationName parameter must be non null.");

            TEndpoint retval = default(TEndpoint);

            bool wildcard = string.Equals(endpointConfigurationName, "*", StringComparison.Ordinal);

            ClientSection clientSection = ClientSection.GetSection();

            foreach (ChannelEndpointElement channelEndpointElement in clientSection.Endpoints)
            {
                if (string.IsNullOrEmpty(channelEndpointElement.Kind))
                {
                    continue;
                }

                if (endpointConfigurationName == channelEndpointElement.Name || wildcard)
                {
                    TEndpoint endpoint = LookupEndpoint <TEndpoint>(channelEndpointElement);
                    if (endpoint != null)
                    {
                        if (retval != null)
                        {
                            if (wildcard)
                            {
                                throw FxTrace.Exception.AsError(
                                          new InvalidOperationException(
                                              SR2.DiscoveryConfigMultipleEndpointsMatchWildcard(
                                                  typeof(TEndpoint).FullName,
                                                  clientSection.SectionInformation.SectionName)));
                            }
                            else
                            {
                                throw FxTrace.Exception.AsError(
                                          new InvalidOperationException(
                                              SR2.DiscoveryConfigMultipleEndpointsMatch(
                                                  typeof(TEndpoint).FullName,
                                                  endpointConfigurationName,
                                                  clientSection.SectionInformation.SectionName)));
                            }
                        }
                        else
                        {
                            retval = endpoint;
                        }
                    }
                }
            }

            if (retval == null)
            {
                if (wildcard)
                {
                    throw FxTrace.Exception.AsError(
                              new InvalidOperationException(
                                  SR2.DiscoveryConfigNoEndpointsMatchWildcard(
                                      typeof(TEndpoint).FullName,
                                      clientSection.SectionInformation.SectionName)));
                }
                else
                {
                    throw FxTrace.Exception.AsError(
                              new InvalidOperationException(
                                  SR2.DiscoveryConfigNoEndpointsMatch(
                                      typeof(TEndpoint).FullName,
                                      endpointConfigurationName,
                                      clientSection.SectionInformation.SectionName)));
                }
            }

            return(retval);
        }