如何关闭“AmazonS3”对象中的自动代理检测



在应用程序启动后首次使用 AmazonS3 对象时,存在大约 14 秒的大延迟。并非所有后续调用都存在此大时间延迟。

我之前在其他HTTP相关类中遇到过这种确切的延迟问题,这是当有问题的类尝试确定本地机器的代理设置以及是否使用它们时引起的。

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

我专门尝试将ProxyHost设置为null

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

这行不通。我们目前使用的是 Amazon .NET 开发工具包"v1.3.17.0"。

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

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

属性获取或设置全局代理。这 属性确定默认代理 WebRequest 实例在请求支持代理且没有代理时使用 是使用 Proxy 属性显式设置的。[强调我的]

您遇到的代理自动检测应该是由相应的IE行为引起的:

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

因此,我希望可以像您提到的WebClient.Proxy Property一样禁用它,尽管是在类级别,正如最后一段所强烈建议的那样:

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


由 blexandre 添加

此答案的示例代码将是

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

请注意,这将禁用每个 Web 请求的代理,_client是使用它创建的,因此这样做是安全的,但如果您可能有更多来自 WebRequest 类的请求挂起,请小心

最新更新