internal static bool TryAdd(string name, ServiceEndpoint endpoint, out string endpointSectionName) { // TryAdd built on assumption that StandardEndpointsSectionGroup.Configuration is valid. // This should be protected at the callers site. If assumption is invalid, then // configuration system is in an indeterminate state. Need to stop in a manner that // user code can not capture. if (null == StandardEndpointsSection.Configuration) { Fx.Assert("The TryAdd(string name, ServiceEndpoint endpoint, Configuration config, out string endpointSectionName) variant of this function should always be called first. The Configuration object is not set."); DiagnosticUtility.FailFast("The TryAdd(string name, ServiceEndpoint endpoint, Configuration config, out string endpointSectionName) variant of this function should always be called first. The Configuration object is not set."); } bool retval = false; string outEndpointSectionName = null; StandardEndpointsSection sectionGroup = StandardEndpointsSection.GetSection(StandardEndpointsSection.Configuration); sectionGroup.UpdateEndpointSections(); foreach (string sectionName in sectionGroup.EndpointCollectionElements.Keys) { EndpointCollectionElement endpointCollectionElement = sectionGroup.EndpointCollectionElements[sectionName]; MethodInfo tryAddMethod = endpointCollectionElement.GetType().GetMethod("TryAdd", BindingFlags.Instance | BindingFlags.NonPublic); if (tryAddMethod != null) { retval = (bool)tryAddMethod.Invoke(endpointCollectionElement, new object[] { name, endpoint, StandardEndpointsSection.Configuration }); if (retval) { outEndpointSectionName = sectionName; break; } } } // This little oddity exists to make sure that the out param is assigned to before the method // exits. endpointSectionName = outEndpointSectionName; return(retval); }