2012-01-23 1 views
7

При использовании объекта AmazonS3 в первый раз после запуска приложения происходит большая задержка приблизительно 14 секунд. Эта большая временная задержка отсутствует для всех последующих вызовов.Как отключить автоматическое определение прокси-сервера в объекте «AmazonS3»?

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

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

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

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

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

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

ответ

6

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

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

прокси автоопределение вы испытываете, предположительно, индуцированный соответствующим поведением IE:

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

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

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


Добавил blexandre

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

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

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

+1

Спасибо за ответ! Я ценю, что вы нашли время, чтобы прорыть код. Это действительно помогает узнать, какой метод использует SDK под капотом. Я также разместил этот вопрос на форуме разработчиков Amazon .NET SDK, если я получу дополнительную информацию, я отправлю его здесь. Учитывая предоставленную вами информацию, если SDK не может в настоящее время отключить обнаружение прокси-сервера, для них было бы тривиальным изменением, поскольку они используют класс 'WebRequest' для HTTP-запросов. +1 – InvertedAcceleration

+1

@InvertedAcceleration - 'WebRequest.DefaultWebProxy' является * общедоступным статическим * свойством, поэтому вы действительно можете настроить его самостоятельно в своем приложении без каких-либо изменений в SDK (это действительно отличается от дизайна WebClient.Proxy) , Я подчеркнул это в ответе сейчас, извиняюсь за то, что вводил в заблуждение! –

+1

Удивительно, что отлично работает! Еще раз спасибо! Хотелось бы, чтобы я мог +2, а также принять, поскольку акцент делает его действительно понятным сейчас (извините, что я пропустил его в первоначальном ответе!) :) – InvertedAcceleration

Смежные вопросы