2012-01-23 26 views
7

在應用程序啓動後第一次使用AmazonS3對象時,會有大約14秒的大延遲。對於所有後續的呼叫,這個大的時間延遲不存在。如何關閉`AmazonS3`對象中的自動代理檢測?

我遇到了這個確切的延遲問題之前,與其他HTTP相關的類,它是在有問題的類試圖確定本地計算機的代理設置以及是否使用它們時引起的。

要阻止WebClient發生這種情況,您設置了WebClient.Proxy = null;並且它不會嘗試自動檢測代理設置,但我無法弄清楚如何禁用AmazonS3對象的代理檢測功能。

我曾專門嘗試設置ProxyHostnull

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

,沒有工作。我們目前正在使用Amazon .NET SDK'v1.3.17.0'。

有沒有辦法關閉代理檢測?

回答

6

好問題 - 我自己沒有嘗試過,只分析了代碼,但AmazonS3Config Class使用私有方法configureWebRequest(),而這種方法依靠WebRequest Class來處理實際的HTTP連接。現在,WebRequestWebRequest.DefaultWebProxy Property,這是公共靜態(即你可以調用CreateAmazonS3Client(()之前,你的應用程序中設置此):

的DefaultWebProxy屬性獲取或設置全局代理。如果請求支持代理並且沒有使用代理屬性明確設置代理 ,則DefaultWebProxy屬性確定默認代理,即所有 WebRequest實例都使用。 [重點煤礦]

代理自動檢測您遇到被認爲是由各自的IE行爲引起的:

的DefaultWebProxy財產在app.config 文件中讀取代理設置。如果沒有配置文件,則使用當前用戶的Internet Explorer (IE)代理設置。

因此我希望這可以以類似的方式被禁止作爲WebClient.Proxy Property你提到,儘管在類級別,事實上強烈的最後一段建議:

如果DefaultWebProxy屬性設置爲空,所有後續 由Create創建的WebRequest類的實例或 CreateDefault方法沒有代理[重點煤礦]


添加人blexandre

示例代碼從這個答案會是

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

,這將禁用代理的每一個網頁請求,_client是使用它創建的,因此可以安全地執行此操作,但請注意,如果您的WebRequest類可能有更多請求待處理

+1

感謝您的回覆!我很感激你花時間去挖掘代碼。這真的有助於瞭解SDK在底層使用什麼技術。我也在亞馬遜.NET SDK開發者論壇上發佈了這個問題,如果我得到任何額外的信息,我會在這裏發佈。根據您提供的信息,如果SDK目前無法關閉代理檢測功能,對於他們使用WebRequest類來處理HTTP請求,這似乎是一個微不足道的變化。 +1 – InvertedAcceleration

+1

@InvertedAcceleration - WebRequest.DefaultWebProxy是一個* public static *屬性,因此您應該可以在應用程序中自己配置它,而不需要對SDK進行任何更改(這實際上與WebClient.Proxy設計不同) 。我現在在回答中強調了這一點,抱歉誤導了! –

+1

太棒了,完美的作品!再次感謝!希望我可以+2以及接受,因爲現在的重點使它真的很清楚(對不起,我錯過了它的初步答案!):) – InvertedAcceleration