internal TimeRestrictedMonitor(TimeoutUtils.TimeLeft timeLeft, TimeoutUtils.OnTimoutAction timoutAction) { this.timeLeft = timeLeft; this.timoutAction = timoutAction; if (!timeLeft.Infinite && timeLeft.TimeMs < 0) { timoutAction(); } this.watch = Stopwatch.StartNew(); }
internal static Uri ResolveActualClusterUri(Uri dataSourceUri, string asAzureServerName, AadTokenHolder aadTokenHolder, ref TimeoutUtils.TimeLeft timeLeft, TimeoutUtils.OnTimoutAction timeoutAction) { Uri uri = ASAzureUtility.ClustersCache.GetCluster(dataSourceUri, asAzureServerName); if (uri != null) { return(uri); } try { using (new TimeoutUtils.TimeRestrictedMonitor(timeLeft, timeoutAction)) { Uri uri2 = new UriBuilder(dataSourceUri) { Path = "/webapi/clusterResolve" }.Uri; ASAzureUtility.NameResolutionRequest requestObject = new ASAzureUtility.NameResolutionRequest { ServerName = asAzureServerName }; ASAzureUtility.NameResolutionResult nameResolutionResult = ASAzureUtility.PostHttpJsonData <ASAzureUtility.NameResolutionRequest, ASAzureUtility.NameResolutionResult>(uri2, requestObject, aadTokenHolder.GetValidAccessToken(), timeLeft.TimeMs); uri = new UriBuilder(dataSourceUri) { Host = nameResolutionResult.ClusterFqdn }.Uri; ASAzureUtility.ClustersCache.AddCluster(dataSourceUri, asAzureServerName, uri); } } catch (WebException ex) { ASAzureUtility.ThrowConnectionException(ex); } return(uri); }