Как отключить автоматическое определение прокси в объекте `AmazonS3`?

При использовании AmazonS3 В первый раз после запуска приложения возникает большая задержка около 14 секунд. Эта большая задержка не присутствует для всех последующих вызовов.

Ранее я сталкивался с проблемой точной задержки с другими связанными классами HTTP, и она возникает, когда рассматриваемый класс пытается определить параметры прокси-сервера локального компьютера и использовать их или нет.

Чтобы этого не случилось с WebClient, Ты устанавливаешь WebClient.Proxy = null; и он не пытается автоматически определить настройки прокси, но я не могу понять, как отключить функцию обнаружения прокси в AmazonS3 объект.

Я специально пытался установить ProxyHost в null:

_s3Client = AWSClientFactory.CreateAmazonS3Client(awsAccessKey, awsSecretAccessKey, new AmazonS3Config { ProxyHost = null });

Который не работал. В настоящее время мы используем Amazon .NET SDK "v1.3.17.0".

Есть ли способ отключить обнаружение прокси?

1 ответ

Решение

Хороший вопрос - я не пробовал сам, а только проанализировал код, но класс AmazonS3Config использует закрытый метод configureWebRequest()который, в свою очередь, использует класс WebRequest для обработки фактического HTTP-соединения. Сейчас, WebRequest имеет свойство WebRequest.DefaultWebProxy, которое является статическим (то есть вы можете установить его в своем приложении перед вызовом CreateAmazonS3Client(()):

Свойство DefaultWebProxy получает или устанавливает глобальный прокси. Свойство DefaultWebProxy определяет прокси-сервер по умолчанию, который используют все экземпляры WebRequest, если запрос поддерживает прокси-серверы, а прокси-сервер не задан явно с помощью свойства Proxy. [акцент мой]

Предполагаемое автоматическое обнаружение прокси-сервера вызвано соответствующим поведением IE:

Свойство DefaultWebProxy считывает настройки прокси из файла app.config. Если файл конфигурации отсутствует, используются настройки прокси-сервера текущего пользователя Internet Explorer (IE).

Следовательно, я надеюсь, что это можно отключить таким же образом, как и для свойства WebClient.Proxy, которое вы упомянули, хотя и на уровне класса, как действительно настоятельно рекомендуется в последнем абзаце:

Если для свойства DefaultWebProxy установлено значение null, все последующие экземпляры класса WebRequest, созданные методами Create или CreateDefault , не имеют прокси. [акцент мой]


Добавлено blexandre

Пример кода из этого ответа будет

System.Net.WebRequest.DefaultWebProxy = null;
_s3Client = AWSClientFactory.CreateAmazonS3Client(awsAccessKey, awsSecretAccessKey);

Обратите внимание, что это отключит прокси для каждого веб-запроса, _client создается с его помощью, так что это безопасно, но будьте осторожны, если у вас может быть больше запросов, ожидающих от WebRequest учебный класс

Другие вопросы по тегам