在应用程序启动后第一次使用AmazonS3
对象时,会有大约14秒的大延迟。所有后续呼叫都不会出现这么大的时间延迟。
我之前遇到过这个与其他HTTP相关的类的确切延迟问题,并且当有问题的类试图确定本地计算机的代理设置以及是否使用它们时,会导致它。
要阻止WebClient
发生这种情况,您设置WebClient.Proxy = null;
并且它不会尝试自动检测代理设置,但我无法弄清楚如何禁用{{1}的代理检测功能{1}}对象。
我专门尝试将AmazonS3
设置为ProxyHost
:
null
哪个不起作用。我们目前正在使用Amazon .NET SDK“v1.3.17.0”。
有没有办法关闭代理检测?
答案 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,则后续所有 Create或创建的WebRequest类的实例 CreateDefault方法没有代理。 [强调我的]
由blexandre
添加此答案的示例代码将是
System.Net.WebRequest.DefaultWebProxy = null;
_s3Client = AWSClientFactory.CreateAmazonS3Client(awsAccessKey, awsSecretAccessKey);
注意这将禁用每个Web请求的代理,_client
是使用它创建的,因此可以安全地执行此操作,但是如果您可能有更多请求待处理,请务必小心来自WebRequest
类