protected override void WriteResult <T>(IEnumerable <T> dataObjects) { TaskLogger.LogEnter(new object[] { dataObjects }); if (!this.Status) { using (IEnumerator <T> enumerator = dataObjects.GetEnumerator()) { while (enumerator.MoveNext()) { T t = enumerator.Current; IConfigurable configurable = t; Database database = (Database)configurable; bool flag = false; Server server = database.GetServer(); if (server == null) { base.WriteError(new InvalidOperationException(Strings.ErrorDBOwningServerNotFound(database.Identity.ToString())), ErrorCategory.InvalidOperation, database.Identity); } else { flag = server.IsE15OrLater; } if (this.AllowLegacy || flag) { this.WriteResult(database); } } goto IL_66D; } } Dictionary <string, Collection <Database> > dictionary = new Dictionary <string, Collection <Database> >(); foreach (T t2 in dataObjects) { IConfigurable configurable2 = t2; Database database2 = (Database)configurable2; string text = null; bool flag2 = false; Server server2 = database2.GetServer(); if (server2 == null) { base.WriteError(new InvalidOperationException(Strings.ErrorDBOwningServerNotFound(database2.Identity.ToString())), ErrorCategory.InvalidOperation, database2.Identity); } else { flag2 = server2.IsE15OrLater; } bool flag3; if (flag2) { ActiveManager activeManager = null; Exception ex = null; try { activeManager = ActiveManager.CreateCustomActiveManager(false, null, null, null, null, null, null, (ITopologyConfigurationSession)this.ConfigurationSession, false); DatabaseLocationInfo serverForDatabase = activeManager.GetServerForDatabase(database2.Guid, GetServerForDatabaseFlags.IgnoreAdSiteBoundary); text = serverForDatabase.ServerFqdn; } catch (DatabaseNotFoundException ex2) { ex = ex2; } catch (ObjectNotFoundException ex3) { ex = ex3; } catch (ServerForDatabaseNotFoundException ex4) { ex = ex4; } finally { if (activeManager != null) { activeManager.Dispose(); activeManager = null; } } if (ex != null) { TaskLogger.Trace("GetDatabase.WriteResult() raised exception from AM.GetServerForDatabase() for database '{0}': {1}", new object[] { database2.Name, ex.ToString() }); this.WriteResult(database2); this.WriteWarning(Strings.ErrorFailedToQueryActiveServerForDatabase(database2.Name, ex.Message)); continue; } database2.MountedOnServer = text; flag3 = true; } else { text = server2.Fqdn; database2.MountedOnServer = text; flag3 = this.AllowLegacy; } if (flag3) { Collection <Database> collection; if (!dictionary.TryGetValue(text, out collection)) { collection = new Collection <Database>(); dictionary.Add(text, collection); } collection.Add(database2); } } foreach (string text2 in dictionary.Keys) { Collection <Database> collection2 = dictionary[text2]; try { base.WriteVerbose(Strings.VerboseConnectionAdminRpcInterface(text2)); using (ExRpcAdmin exRpcAdmin = ExRpcAdmin.Create("Client=Management", text2, null, null, null)) { Guid[] array = new Guid[collection2.Count]; for (int i = 0; i < collection2.Count; i++) { array[i] = collection2[i].Guid; base.WriteVerbose(Strings.VerboseCheckDatabaseStatus(array[i].ToString())); } MdbStatus[] array2 = exRpcAdmin.ListMdbStatus(array); for (int j = 0; j < collection2.Count; j++) { collection2[j].Mounted = new bool?((array2[j].Status & MdbStatusFlags.Online) != MdbStatusFlags.Offline); collection2[j].OnlineMaintenanceInProgress = new bool?((array2[j].Status & MdbStatusFlags.Isinteg) == MdbStatusFlags.Offline); collection2[j].BackupInProgress = new bool?((array2[j].Status & MdbStatusFlags.Backup) != MdbStatusFlags.Offline); if (collection2[j].Mounted.Value) { this.FillLastBackupTimes(exRpcAdmin, collection2[j]); if (collection2[j].LastFullBackup != null) { collection2[j].LastFullBackup = new DateTime?(collection2[j].LastFullBackup.Value.ToLocalTime()); } if (collection2[j].LastIncrementalBackup != null) { collection2[j].LastIncrementalBackup = new DateTime?(collection2[j].LastIncrementalBackup.Value.ToLocalTime()); } if (collection2[j].LastDifferentialBackup != null) { collection2[j].LastDifferentialBackup = new DateTime?(collection2[j].LastDifferentialBackup.Value.ToLocalTime()); } if (collection2[j].LastCopyBackup != null) { collection2[j].LastCopyBackup = new DateTime?(collection2[j].LastCopyBackup.Value.ToLocalTime()); } this.FillDatabaseSize(exRpcAdmin, collection2[j]); if (collection2[j].GetServer().IsE15OrLater) { this.FillDatabaseProcessInfo(exRpcAdmin, collection2[j]); } } else { TaskLogger.Trace("Database {0} is not mounted, not getting the last backup times of it", new object[] { collection2[j].Name }); } this.WriteResult(collection2[j]); } } } catch (MapiPermanentException ex5) { TaskLogger.Trace(string.Format(CultureInfo.InvariantCulture, "GetDatabase.WriteResult() raises exception while connecting to server '{0}': {1}", new object[] { text2, ex5.Message }), new object[0]); foreach (Database dataObject in collection2) { this.WriteResult(dataObject); this.WriteWarning(Strings.ErrorFailedToConnectToStore(text2)); } } catch (MapiRetryableException ex6) { TaskLogger.Trace(string.Format(CultureInfo.InvariantCulture, "GetDatabase.WriteResult() raises exception while connecting to server '{0}': {1}", new object[] { text2, ex6.Message }), new object[0]); foreach (Database dataObject2 in collection2) { this.WriteResult(dataObject2); this.WriteWarning(Strings.ErrorFailedToConnectToStore(text2)); } } } IL_66D: TaskLogger.LogExit(); }