2012-01-23 9 views
7

Al utilizar el objeto AmazonS3 por primera vez después de que se inicia la aplicación, hay un gran retraso de aproximadamente 14 segundos. Este gran retraso de tiempo no está presente para todas las llamadas posteriores.¿Cómo desactivar la detección automática de proxy en el objeto `AmazonS3`?

Me he encontrado con este problema de retraso exacto antes con otras clases relacionadas con HTTP y se produce cuando la clase en cuestión intenta determinar la configuración proxy del equipo local y si usarlos o no.

Para evitar que esto suceda con WebClient, se establece WebClient.Proxy = null; y no trata de detectar automáticamente la configuración del proxy, pero no puedo encontrar la manera de desactivar la funcionalidad de detección de proxy del objeto AmazonS3.

He tratado específicamente el establecimiento de la ProxyHost a null:

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

los cuales no funcionaba. Actualmente estamos utilizando Amazon .NET SDK 'v1.3.17.0'.

¿Hay alguna manera de desactivar la detección de proxy?

Respuesta

6

Buena pregunta: no la he probado solo y solo analicé el código, pero el AmazonS3Config Class usa un método privado configureWebRequest(), que a su vez se basa en el WebRequest Class para manejar la conexión HTTP real. Ahora, WebRequest tiene un WebRequest.DefaultWebProxy Property, que es pública estática (es decir, puede establecer esta dentro de su aplicación antes de llamar CreateAmazonS3Client(()):

La propiedad DefaultWebProxy Obtiene o establece el proxy mundial. La propiedad DefaultWebProxy determina el proxy predeterminado que todas las instancias de WebRequest usan si la solicitud admite proxies y ningún proxy se establece explícitamente utilizando la propiedad Proxy. [el énfasis es mío]

La detección automática de proxy que está experimentando es supuestamente inducida por el respectivo comportamiento IE:

La propiedad DefaultWebProxy lee la configuración del proxy del archivo app.config . Si no hay un archivo de configuración, se utiliza la configuración de proxy de Internet Explorer (IE) del usuario actual.

En consecuencia yo espero que esto se puede desactivar de manera similar a la del WebClient.Proxy Property usted ha mencionado, aunque en el nivel de clase, como en efecto fuertemente sugerido por el último párrafo:

Si el La propiedad DefaultWebProxy está establecida en nulo, todas las instancias posteriores de la clase WebRequest creadas por Create o CreateDefault métodos no tienen un proxy.[el énfasis es mío]


Añadido por blexandre

código de ejemplo de esta respuesta sería

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

Nota que esto va a desactivar el proxy para cada Web solicitud, _client se crea usando, por lo que es seguro hacer esto, pero tenga cuidado si puede tener más solicitudes pendientes de la clase WebRequest

+1

¡Gracias por la respuesta! Aprecio que te tomes el tiempo de profundizar en el código. Realmente ayuda saber qué técnica está usando el SDK bajo el capó. También publiqué esta pregunta en el foro de desarrolladores de Amazon .NET SDK. Si recibo información adicional, la publicaré aquí. Dada la información que ha proporcionado, si el SDK no puede desactivar actualmente la detección de proxy, parecería un cambio trivial para ellos dado que están utilizando la clase 'WebRequest' para las solicitudes HTTP. +1 – InvertedAcceleration

+1

@InvertedAcceleration - 'WebRequest.DefaultWebProxy' es una propiedad * public static *, por lo que en realidad debería poder configurarlo usted mismo en su aplicación sin ningún cambio en el SDK (esto es diferente del diseño de WebClient.Proxy) . He enfatizado esto en la respuesta ahora, ¡lo siento por ser engañoso! –

+1

¡Impresionante, eso funciona perfectamente! ¡Gracias de nuevo! Ojalá pudiera +2, así como aceptar, ya que el énfasis lo hace realmente claro ahora (lo siento, lo extrañé en la respuesta inicial) :) – InvertedAcceleration

Cuestiones relacionadas