/// <summary>
        /// Obtains the next reader service during the discovery process
        /// being managed by a session variable tracking cirlce of trusts
        /// currently being checked.
        /// </summary>
        /// <param name="serviceProviderUtility">ServiceProviderUtility containing circle-of-trust information.</param>
        /// <param name="context">HttpContext containing session, request, and response objects.</param>
        /// <returns>
        /// Returns the URL found in the currently checked circle-of-trust file if specified, null otherwise.
        /// </returns>
        public static Uri GetReaderServiceUrl(ServiceProviderUtility serviceProviderUtility, HttpContext context)
        {
            HttpSessionState session = context.Session;
            Uri readerSvcUrl         = null;

            ArrayList cotList = (ArrayList)session[IdentityProviderDiscoveryUtils.CommonDomainDiscoverySessionAttribute];

            if (cotList == null)
            {
                // Obtain the list of currently tracked circle-of-trusts with
                // reader service if not already known.
                cotList = new ArrayList();
                foreach (string cotName in serviceProviderUtility.CircleOfTrusts.Keys)
                {
                    CircleOfTrust cot = (CircleOfTrust)serviceProviderUtility.CircleOfTrusts[cotName];
                    if (cot.ReaderServiceUrl != null)
                    {
                        cotList.Add(cotName);
                    }
                }
            }

            IEnumerator enumerator = cotList.GetEnumerator();

            if (enumerator.MoveNext())
            {
                // Try the first service in the list
                string cotName = (string)enumerator.Current;
                cotList.Remove(cotName);
                session[IdentityProviderDiscoveryUtils.CommonDomainDiscoverySessionAttribute] = cotList;
                CircleOfTrust cot = (CircleOfTrust)serviceProviderUtility.CircleOfTrusts[cotName];
                readerSvcUrl = new Uri(cot.ReaderServiceUrl.AbsoluteUri);
            }

            return(readerSvcUrl);
        }
        /// <summary>
        /// Internal method to load all configuration information for all
        /// circle of trusts found in the home folder.
        /// </summary>
        private void InitializeCircleOfTrusts()
        {
            DirectoryInfo dirInfo = new DirectoryInfo(this.homeFolder);
            FileInfo[] files = dirInfo.GetFiles("fedlet*.cot");

            foreach (FileInfo file in files)
            {
                CircleOfTrust cot = new CircleOfTrust(file.FullName);
                string key = cot.Attributes["cot-name"];
                this.CircleOfTrusts.Add(key, cot);
            }

            if (this.CircleOfTrusts.Count <= 0)
            {
                throw new ServiceProviderUtilityException(Resources.ServiceProviderUtiltyCircleOfTrustsNotFound);
            }
        }