internal static Uri GetFailBackUrl(EcpService ecpService) { Uri uri = null; if (VirtualDirectoryConfiguration.failbackUrlCache.TryGetValue(ecpService.MetabasePath, out uri)) { return(uri); } string webSiteRoot = IisUtility.GetWebSiteRoot(ecpService.MetabasePath); foreach (ADOwaVirtualDirectory adowaVirtualDirectory in VirtualDirectoryConfiguration.FindVirtualDirectoriesForServer <ADOwaVirtualDirectory>(ecpService.ServerFullyQualifiedDomainName)) { if (webSiteRoot.Equals(IisUtility.GetWebSiteRoot(adowaVirtualDirectory.MetabasePath), StringComparison.OrdinalIgnoreCase) && adowaVirtualDirectory.FailbackUrl != null) { uri = new UriBuilder(adowaVirtualDirectory.FailbackUrl) { Path = ecpService.Url.AbsolutePath, Query = ecpService.Url.Query }.Uri; } } VirtualDirectoryConfiguration.failbackUrlCache[ecpService.MetabasePath] = uri; return(uri); }