Esempio n. 1
0
        public static async Task <VssConnection> GetVssConnectionAsync(Uri uri, string accessToken, DelegatingHandler retryOnTimeoutMessageHandler = null)
        {
            VssConnection connection;

            if (!_vssConnections.TryGetValue(uri, out connection))
            {
                VssClientCredentials cred = GetCredentials(accessToken);

                VssClientHttpRequestSettings settings = VssClientHttpRequestSettings.Default.Clone();

                if (settings.SendTimeout < _minTimeout)
                {
                    settings.SendTimeout = _minTimeout;
                }

                VssHttpMessageHandler innerHandler = new VssHttpMessageHandler(cred, settings);

                DelegatingHandler[] handlers = new DelegatingHandler[]
                {
                    retryOnTimeoutMessageHandler
                };

                connection = new VssConnection(uri, innerHandler, handlers);
                await connection.ConnectAsync().ConfigureAwait(false);

                if (!_vssConnections.TryAdd(uri, connection))
                {
                    // first writer wins. Every caller returned the same instance.
                    connection = _vssConnections[uri];
                }
            }

            return(connection);
        }
Esempio n. 2
0
        public static VssConnection CreateConnection(Uri serverUri, VssCredentials credentials)
        {
            VssClientHttpRequestSettings settings = VssClientHttpRequestSettings.Default.Clone();

            settings.MaxRetryRequest = 5;

            var headerValues = new List <ProductInfoHeaderValue>();

#if OS_WINDOWS
            headerValues.Add(new ProductInfoHeaderValue("VstsAgentCore-windows", Constants.Agent.Version));
#elif OS_OSX
            headerValues.Add(new ProductInfoHeaderValue("VstsAgentCore-darwin", Constants.Agent.Version));
#elif OS_LINUX
            headerValues.Add(new ProductInfoHeaderValue("VstsAgentCore-linux", Constants.Agent.Version));
#endif
            headerValues.Add(new ProductInfoHeaderValue($"({RuntimeInformation.OSDescription.Trim()})"));

            if (settings.UserAgent != null && settings.UserAgent.Count > 0)
            {
                headerValues.AddRange(settings.UserAgent);
            }

            settings.UserAgent = headerValues;

            VssConnection connection = new VssConnection(serverUri, credentials, settings);
            return(connection);
        }
Esempio n. 3
0
        public static VssConnection CreateConnection(Uri serverUri, VssCredentials credentials, IEnumerable <DelegatingHandler> additionalDelegatingHandler = null, TimeSpan?timeout = null)
        {
            VssClientHttpRequestSettings settings = VssClientHttpRequestSettings.Default.Clone();

            // make sure MaxRetryRequest in range [3, 10]
            int maxRetryRequest = AgentKnobs.HttpRetryCount.GetValue(_knobContext).AsInt();

            settings.MaxRetryRequest = Math.Min(Math.Max(maxRetryRequest, 3), 10);

            // prefer parameter, otherwise use httpRequestTimeoutSeconds and make sure httpRequestTimeoutSeconds in range [100, 1200]
            int httpRequestTimeoutSeconds = AgentKnobs.HttpTimeout.GetValue(_knobContext).AsInt();

            settings.SendTimeout = timeout ?? TimeSpan.FromSeconds(Math.Min(Math.Max(httpRequestTimeoutSeconds, 100), 1200));

            // Remove Invariant from the list of accepted languages.
            //
            // The constructor of VssHttpRequestSettings (base class of VssClientHttpRequestSettings) adds the current
            // UI culture to the list of accepted languages. The UI culture will be Invariant on OSX/Linux when the
            // LANG environment variable is not set when the program starts. If Invariant is in the list of accepted
            // languages, then "System.ArgumentException: The value cannot be null or empty." will be thrown when the
            // settings are applied to an HttpRequestMessage.
            settings.AcceptLanguages.Remove(CultureInfo.InvariantCulture);

            VssConnection connection = new VssConnection(serverUri, new VssHttpMessageHandler(credentials, settings), additionalDelegatingHandler);

            return(connection);
        }
Esempio n. 4
0
        public static VssConnection CreateConnection(Uri serverUri, VssCredentials credentials)
        {
            VssClientHttpRequestSettings settings = VssClientHttpRequestSettings.Default.Clone();

            settings.MaxRetryRequest = 5;

            // Remove Invariant from the list of accepted languages.
            //
            // The constructor of VssHttpRequestSettings (base class of VssClientHttpRequestSettings) adds the current
            // UI culture to the list of accepted languages. The UI culture will be Invariant on OSX/Linux when the
            // LANG environment variable is not set when the program starts. If Invariant is in the list of accepted
            // languages, then "System.ArgumentException: The value cannot be null or empty." will be thrown when the
            // settings are applied to an HttpRequestMessage.
            settings.AcceptLanguages.Remove(CultureInfo.InvariantCulture);

            var headerValues = new List <ProductInfoHeaderValue>();

            headerValues.Add(new ProductInfoHeaderValue($"VstsAgentCore-{BuildConstants.AgentPackage.PackageName}", Constants.Agent.Version));
            headerValues.Add(new ProductInfoHeaderValue($"({RuntimeInformation.OSDescription.Trim()})"));

            if (settings.UserAgent != null && settings.UserAgent.Count > 0)
            {
                headerValues.AddRange(settings.UserAgent);
            }

            settings.UserAgent = headerValues;

            VssConnection connection = new VssConnection(serverUri, credentials, settings);

            return(connection);
        }
Esempio n. 5
0
        public static VssConnection CreateConnection(Uri serverUri, VssCredentials credentials)
        {
            VssClientHttpRequestSettings settings = VssClientHttpRequestSettings.Default.Clone();

            settings.MaxRetryRequest = 5;

            var headerValues = new List <ProductInfoHeaderValue>();

            headerValues.Add(new ProductInfoHeaderValue("VstsAgent", Constants.Agent.Version));
            VssConnection connection = new VssConnection(serverUri, credentials, settings);

            return(connection);
        }
Esempio n. 6
0
        public static VssConnection CreateConnection(Uri serverUri, VssCredentials credentials, IEnumerable <DelegatingHandler> additionalDelegatingHandler = null)
        {
            VssClientHttpRequestSettings settings = VssClientHttpRequestSettings.Default.Clone();

            int maxRetryRequest;

            if (!int.TryParse(Environment.GetEnvironmentVariable("VSTS_HTTP_RETRY") ?? string.Empty, out maxRetryRequest))
            {
                maxRetryRequest = 5;
            }

            // make sure MaxRetryRequest in range [5, 10]
            settings.MaxRetryRequest = Math.Min(Math.Max(maxRetryRequest, 5), 10);

            int httpRequestTimeoutSeconds;

            if (!int.TryParse(Environment.GetEnvironmentVariable("VSTS_HTTP_TIMEOUT") ?? string.Empty, out httpRequestTimeoutSeconds))
            {
                httpRequestTimeoutSeconds = 100;
            }

            // make sure httpRequestTimeoutSeconds in range [100, 1200]
            settings.SendTimeout = TimeSpan.FromSeconds(Math.Min(Math.Max(httpRequestTimeoutSeconds, 100), 1200));

            // Remove Invariant from the list of accepted languages.
            //
            // The constructor of VssHttpRequestSettings (base class of VssClientHttpRequestSettings) adds the current
            // UI culture to the list of accepted languages. The UI culture will be Invariant on OSX/Linux when the
            // LANG environment variable is not set when the program starts. If Invariant is in the list of accepted
            // languages, then "System.ArgumentException: The value cannot be null or empty." will be thrown when the
            // settings are applied to an HttpRequestMessage.
            settings.AcceptLanguages.Remove(CultureInfo.InvariantCulture);

            var headerValues = new List <ProductInfoHeaderValue>();

            headerValues.Add(new ProductInfoHeaderValue($"VstsAgentCore-{BuildConstants.AgentPackage.PackageName}", Constants.Agent.Version));
            headerValues.Add(new ProductInfoHeaderValue($"({RuntimeInformation.OSDescription.Trim()})"));

            if (settings.UserAgent != null && settings.UserAgent.Count > 0)
            {
                headerValues.AddRange(settings.UserAgent);
            }

            settings.UserAgent = headerValues;

            VssConnection connection = new VssConnection(serverUri, new VssHttpMessageHandler(credentials, settings), additionalDelegatingHandler);

            return(connection);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="location"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        protected virtual async Task <ILocationDataProvider> CreateDataProviderAsync(
            String location,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            VssClientHttpRequestSettings locationServiceRequestSettings = VssClientHttpRequestSettings.Default.Clone();

            locationServiceRequestSettings.SendTimeout = TimeSpan.FromSeconds(30); // If not set here, the send timeout will use the default of 100 seconds, which is too long.
            VssConnection          connection   = new VssConnection(new Uri(location), m_connection.Credentials, locationServiceRequestSettings);
            IVssServerDataProvider dataProvider = connection.ServerDataProvider;

            // If this provider is connected, then we should make sure the remote provider
            // is also up-to-date
            if (m_connection.ServerDataProvider.HasConnected)
            {
                await dataProvider.ConnectAsync(ConnectOptions.None, cancellationToken).ConfigureAwait(false);
            }

            return(dataProvider);
        }
        public static VssConnection CreateConnection(Uri serverUri, VssCredentials credentials, IEnumerable <DelegatingHandler> additionalDelegatingHandler = null, TimeSpan?timeout = null)
        {
            VssClientHttpRequestSettings settings = VssClientHttpRequestSettings.Default.Clone();

            int maxRetryRequest;

            if (!int.TryParse(Environment.GetEnvironmentVariable("GITHUB_ACTIONS_RUNNER_HTTP_RETRY") ?? string.Empty, out maxRetryRequest))
            {
                maxRetryRequest = 3;
            }

            // make sure MaxRetryRequest in range [3, 10]
            settings.MaxRetryRequest = Math.Min(Math.Max(maxRetryRequest, 3), 10);

            if (!int.TryParse(Environment.GetEnvironmentVariable("GITHUB_ACTIONS_RUNNER_HTTP_TIMEOUT") ?? string.Empty, out int httpRequestTimeoutSeconds))
            {
                settings.SendTimeout = timeout ?? TimeSpan.FromSeconds(100);
            }
            else
            {
                // prefer environment variable
                settings.SendTimeout = TimeSpan.FromSeconds(Math.Min(Math.Max(httpRequestTimeoutSeconds, 100), 1200));
            }


            // Remove Invariant from the list of accepted languages.
            //
            // The constructor of VssHttpRequestSettings (base class of VssClientHttpRequestSettings) adds the current
            // UI culture to the list of accepted languages. The UI culture will be Invariant on OSX/Linux when the
            // LANG environment variable is not set when the program starts. If Invariant is in the list of accepted
            // languages, then "System.ArgumentException: The value cannot be null or empty." will be thrown when the
            // settings are applied to an HttpRequestMessage.
            settings.AcceptLanguages.Remove(CultureInfo.InvariantCulture);

            VssConnection connection = new VssConnection(serverUri, new VssHttpMessageHandler(credentials, settings), additionalDelegatingHandler);

            return(connection);
        }
Esempio n. 9
0
        private static VssConnection getVssConnection()
        {
            var accessToken   = "<Enter pat token>";
            var collectionUrl = "<Enter your collection>"; //for example - https://dev.azure.com/<accountName>/;

            if (string.IsNullOrEmpty(accessToken))
            {
                Console.WriteLine("Access Token is null or empty");
            }
            if (string.IsNullOrEmpty(collectionUrl))
            {
                Console.WriteLine("Collection Url is null or empty");
            }
            VssClientHttpRequestSettings settings = VssClientHttpRequestSettings.Default.Clone();
            //var vssConnection = new VssConnection(new Uri(collectionUrl), new VssOAuthAccessTokenCredential(accessToken), settings);

            VssBasicCredential basicCred = new VssBasicCredential("VstsAgent", accessToken);

            VssCredentials creds         = new VssCredentials(null, basicCred, CredentialPromptType.DoNotPrompt);
            var            vssConnection = new VssConnection(new Uri(collectionUrl), creds, settings);

            return(vssConnection);
        }
Esempio n. 10
0
        public T GetClient <T>(VssClientHttpRequestSettings settings) where T : VssHttpClientBase
        {
            var connection = new VssConnection(VssConnection.Uri, VssConnection.Credentials, settings);

            return(VssConnection.GetClient <T>());
        }