Beispiel #1
0
        internal static void DiscoverServers(ITopologyConfigurationSession session, bool limitedSearch, out Dictionary <TopologySite, List <TopologyServer> > siteDictionary, out TopologySite localSite)
        {
            if (session == null)
            {
                throw new ArgumentNullException("session");
            }
            ExchangeTopology exchangeTopology = ExchangeTopology.Discover(session, ExchangeTopologyScope.ServerAndSiteTopology);

            localSite      = exchangeTopology.LocalSite;
            siteDictionary = new Dictionary <TopologySite, List <TopologyServer> >();
            if (localSite == null)
            {
                return;
            }
            List <ITopologySite> list = new List <ITopologySite>();

            if (limitedSearch)
            {
                foreach (ITopologySiteLink topologySiteLink in localSite.TopologySiteLinks)
                {
                    foreach (ITopologySite item in topologySiteLink.TopologySites)
                    {
                        if (!list.Contains(item))
                        {
                            list.Add(item);
                        }
                    }
                }
            }
            foreach (TopologyServer topologyServer in exchangeTopology.AllTopologyServers)
            {
                if (topologyServer.TopologySite != null && FederationCertificate.IsServerQualifiedForFederationTrust(topologyServer) && (!limitedSearch || list.Contains(topologyServer.TopologySite)))
                {
                    List <TopologyServer> list2;
                    if (!siteDictionary.TryGetValue(topologyServer.TopologySite, out list2))
                    {
                        list2 = new List <TopologyServer>();
                        siteDictionary.Add(topologyServer.TopologySite, list2);
                    }
                    list2.Add(topologyServer);
                }
            }
        }