2012-01-23 11 views
7

Przy pierwszym użyciu obiektu AmazonS3 po uruchomieniu aplikacji występuje duże opóźnienie wynoszące około 14 sekund. To duże opóźnienie nie występuje przy wszystkich kolejnych połączeniach.Jak wyłączyć automatyczne wykrywanie proxy w obiekcie `AmazonS3`?

Napotkano ten problem z dokładnym opóźnieniem z innymi klasami związanymi z protokołem HTTP i jest on wywoływany, gdy dana klasa próbuje określić ustawienia serwera proxy lokalnego komputera i czy z nich korzystać, czy też nie.

Aby temu zapobiec z WebClient, należy ustawić WebClient.Proxy = null; i nie próbuje automatycznie wykryć ustawień proxy, ale nie mogę się dowiedzieć, jak wyłączyć funkcję wykrywania proxy obiektu AmazonS3.

mam specjalnie starał ustawienie ProxyHost do null:

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

który nie działa. Obecnie korzystamy z zestawu Amazon .NET SDK "v1.3.17.0".

Czy istnieje sposób wyłączenia wykrywania proxy?

Odpowiedz

6

Dobre pytanie - nie próbowałem to sam i tylko analizowali kod, ale AmazonS3Config Class wykorzystuje prywatną metodę configureWebRequest(), która z kolei opiera się na WebRequest Class obsłużyć rzeczywiste połączenia HTTP. Teraz WebRequest ma WebRequest.DefaultWebProxy Property, który jest public static (to samo można ustawić w aplikacji przed wywołaniem CreateAmazonS3Client(()):

Obiekt DefaultWebProxy dostaje lub ustawia globalny serwer proxy. Właściwość DefaultWebProxy o nazwie określa domyślne proxy, którego używają wszystkie żądania, jeśli żądanie obsługuje serwery proxy, a proxy nie jest ustawione jawnie za pomocą właściwości Proxy. [podkr]

Pełnomocnik auto detekcja występują rzekomo wywołaną przez odpowiednie zachowanie IE:

Obiekt DefaultWebProxy odczytuje ustawienia proxy z app.config pliku. Jeśli nie ma pliku konfiguracyjnego, używane są bieżące ustawienia przeglądarki Internet Explorer (IE).

konsekwencji, że mam nadzieję, że to może być wyłączone w podobny sposób jak dla WebClient.Proxy Property wspomniałeś, aczkolwiek na poziomie klasy, jak zresztą wysoce zalecane przez ostatni akapit:

Jeśli Właściwość DefaultWebProxy jest ustawiona na wartość null, wszystkie kolejne instancje utworzone przez metodę Create lub CreateDefault metodami nie mają proxy.[podkr]


Dodane przez blexandre

przykładowy kod od tej odpowiedzi będzie

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

Uwaga że będzie wyłączyć proxy dla każdej sieci żądanie, _client jest tworzone za jego pomocą, więc można to bezpiecznie zrobić, ale zachowaj ostrożność, jeśli masz więcej oczekujących zgłoszeń od WebRequest klasy

+1

Dzięki za odpowiedź! Doceniam, że poświęcasz czas na przeglądanie kodu. To naprawdę pomaga wiedzieć, jakiej techniki używa SDK pod maską. Opublikowalem te pytanie na forum deweloperów Amazon .NET SDK, jesli otrzymam dodatkowe informacje, opublikuję je tutaj. Biorąc pod uwagę podane informacje, jeśli pakiet SDK nie może obecnie wyłączyć wykrywania proxy, wydaje się, że jest to prosta zmiana, ponieważ używają klasy "WebRequest" dla żądań HTTP. +1 – InvertedAcceleration

+1

@InvertedAcceleration - 'WebRequest.DefaultWebProxy' jest właściwością * public static *, więc powinieneś być w stanie skonfigurować ją samodzielnie w aplikacji bez żadnych zmian w SDK (różni się to od projektu WebClient.Proxy) . Podkreśliłem to teraz w odpowiedzi, przepraszam, że wprowadzam w błąd! –

+1

Awesome, to działa idealnie! Dzięki jeszcze raz! Żałuję, że mogłem +2, a także zaakceptować, ponieważ nacisk kładzie na to teraz wyraźnie (przepraszam, że przegapiłem to w początkowej odpowiedzi!) :) – InvertedAcceleration

Powiązane problemy