如何在"AmazonS3"对象中关闭自动代理检测?

Inv*_*ion 7 .net c# proxy amazon-s3 amazon-web-services

AmazonS3应用程序启动后第一次使用该对象时,会有大约14秒的大延迟.所有后续呼叫都不存在这种大的时间延迟.

我之前遇到过这个与其他HTTP相关的类的确切延迟问题,并且当有问题的类试图确定本地机器的代理设置以及是否使用它们时,会导致它.

要阻止这种情况发生WebClient,你设置WebClient.Proxy = null;它并不会尝试自动检测代理设置,但我无法弄清楚如何禁用AmazonS3对象的代理检测功能.

我特意尝试设置ProxyHostnull:

_s3Client = AWSClientFactory.CreateAmazonS3Client(awsAccessKey, awsSecretAccessKey, new AmazonS3Config { ProxyHost = null });
Run Code Online (Sandbox Code Playgroud)

哪个没用.我们目前正在使用Amazon .NET SDK"v1.3.17.0".

有没有办法关闭代理检测?

Ste*_*pel 6

好问题 - 我自己没有尝试过,只分析过代码,但AmazonS3Config类使用私有方法configureWebRequest(),而私有方法又依赖于WebRequest类来处理实际的HTTP连接.现在,WebRequest有一个WebRequest.DefaultWebProxy属性,它是公共静态的(即你可以在调用之前在你的应用程序中设置它CreateAmazonS3Client(()):

DefaultWebProxy属性获取或设置全局代理.DefaultWebProxy属性确定所有WebRequest实例在请求支持代理时使用的默认代理,并且未使用Proxy属性显式设置代理.[强调我的]

您正在经历的代理自动检测据推测是由相应的IE行为引起的:

DefaultWebProxy属性从app.config文件中读取代理设置.如果没有配置文件,则使用当前用户的Internet Explorer(IE)代理设置.

因此,我希望可以通过类似于您提到的WebClient.Proxy属性的方式禁用它,尽管在类级别上,正如最后一段强烈建议的那样:

如果DefaultWebProxy属性设置为null,则Create或CreateDefault方法创建的WebRequest类的所有后续实例都没有代理.[强调我的]


由blexandre添加

这个答案的示例代码是

System.Net.WebRequest.DefaultWebProxy = null;
_s3Client = AWSClientFactory.CreateAmazonS3Client(awsAccessKey, awsSecretAccessKey);
Run Code Online (Sandbox Code Playgroud)

请注意,这将禁用所有的Web请求代理,_client使用它创建,因此它是安全的这样做,但要小心,如果你有可能从待定更多的请求WebRequest