2012-01-23 29 views
7

Quando si utilizza l'oggetto AmazonS3 per la prima volta dopo l'avvio dell'applicazione, c'è un ampio ritardo di circa 14 secondi. Questo ampio ritardo non è presente per tutte le chiamate successive.Come disattivare il rilevamento automatico del proxy nell'oggetto `AmazonS3`?

Ho riscontrato questo problema di ritardo esatto prima con altre classi correlate a HTTP ed è causato quando la classe in questione tenta di determinare le impostazioni del proxy della macchina locale e se usarle o meno.

Per evitare che questo succeda con WebClient, si imposta WebClient.Proxy = null; e non cerca di rilevare automaticamente le impostazioni del proxy, ma non riesco a capire come disattivare la funzionalità di rilevamento del proxy dell'oggetto AmazonS3.

ho specificamente provato a fissare il ProxyHost a null:

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

che non ha funzionato. Attualmente stiamo utilizzando l'SDK di Amazon .NET "v1.3.17.0".

C'è un modo per disattivare il rilevamento proxy?

risposta

6

Buona domanda: non l'ho ancora provato e ho solo analizzato il codice, ma lo utilizza un metodo privato configureWebRequest(), che a sua volta si affida allo WebRequest Class per gestire la connessione HTTP effettiva. Ora, WebRequest ha un WebRequest.DefaultWebProxy Property, che è public static (cioè è possibile impostare questo all'interno dell'applicazione prima di chiamare CreateAmazonS3Client(()):

La proprietà DefaultWebProxy ottiene o imposta il proxy globale. La proprietà DefaultWebProxy determina il proxy predefinito che tutte le istanze WebRequest utilizzano se la richiesta supporta i proxy e nessun proxy viene impostato in modo esplicito utilizzando la proprietà Proxy. [sottolineatura mia]

Il rilevamento automatico proxy che si sta verificando è presumibilmente indotta dalla rispettiva comportamento IE:

La proprietà DefaultWebProxy legge impostazioni proxy dal di file app.config. Se non è presente alcun file di configurazione, vengono utilizzate le impostazioni proxy di Internet Explorer (IE) dell'utente corrente.

Di conseguenza mi auguro che questo può essere disabilitata in un modo simile come per il WebClient.Proxy Property lei ha ricordato, sia pure a livello di classe, come del resto fortemente suggerito dal l'ultimo paragrafo:

Se il La proprietà DefaultWebProxy è impostata su null, tutte le successive istanze della classe WebRequest create dai metodi Create o CreateDefault non dispongono di un proxy.[sottolineatura mia]


Inserito da blexandre

codice di esempio da questa risposta sarebbe

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

Nota che questo disabilitare il proxy per ogni web richiesta, _client viene creata usando questo, quindi è sicuro farlo, ma fai attenzione se potresti avere più richieste in sospeso dalla classe WebRequest

+1

Grazie per la risposta! Apprezzo che tu abbia dedicato del tempo per analizzare il codice. Aiuta davvero sapere quale tecnica l'SDK sta usando sotto il cofano. Ho anche postato questa domanda sul forum degli sviluppatori SDK di Amazon .NET, se avrò qualche informazione in più la posterò qui. Date le informazioni che hai fornito, se l'SDK non può attualmente disattivare il rilevamento proxy, sembrerebbe essere una modifica banale da fare dato che stanno usando la classe 'WebRequest' per le richieste HTTP. +1 – InvertedAcceleration

+1

@InvertedAcceleration - 'WebRequest.DefaultWebProxy' è una proprietà * public static *, quindi dovresti essere in grado di configurarlo da solo all'interno dell'applicazione senza alcuna modifica all'SDK (questo è diverso dal design WebClient.Proxy) . L'ho enfatizzato nella risposta ora, mi dispiace per essere fuorviante! –

+1

Fantastico, funziona perfettamente! Grazie ancora! Vorrei poter aggiungere +2 e accettare dato che l'enfasi lo rende molto chiaro ora (mi dispiace di averlo perso nella risposta iniziale!) :) – InvertedAcceleration

Problemi correlati