Как отключить автоматическое определение прокси в объекте `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
учебный класс