La versione 4 (V4) di è stata rilasciata! AWS SDK per .NET
Per informazioni sulle modifiche sostanziali e sulla migrazione delle applicazioni, consulta l'argomento sulla migrazione.
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Ritentativi e timeout
AWS SDK per .NET Consente di configurare il numero di tentativi e i valori di timeout per le richieste HTTP ai servizi. AWS Se i valori predefiniti per i nuovi tentativi e il timeout non sono appropriati per la tua applicazione, puoi regolarli in base alle tue esigenze, tuttavia è importante comprendere che questa modifica può influire sul comportamento dell'applicazione.
Per determinare i valori da utilizzare per i nuovi tentativi e i timeout, considera quanto segue:
-
In che modo devono rispondere l'applicazione AWS SDK per .NET e l'applicazione quando la connettività di rete si deteriora o un AWS servizio è irraggiungibile? Preferisci che i tentativi di chiamata si interrompano presto o che continuino automaticamente?
-
La tua applicazione è o sito Web o un'applicazione rivolta agli utenti che deve essere reattiva o è un processo di elaborazione in background con una maggiore tolleranza rispetto alle latenze più lunghe?
-
L'applicazione è distribuita su una rete affidabile con bassa latenza o è distribuita in una posizione remota con connettività inaffidabile?
Le impostazioni relative ai tentativi e al timeout influiscono sulle prestazioni percepite dell'applicazione. Per i consigli correlati, consulta. Best practice sulle prestazioni
Tentativi
Panoramica di
AWS SDK per .NET Possono riprovare le richieste che non riescono a causa di limitazioni sul lato server o interruzioni delle connessioni. Esistono due proprietà delle classi di configurazione del servizio che è possibile utilizzare per specificare il comportamento dei nuovi tentativi di un client di servizio. Le classi di configurazione del servizio ereditano queste proprietà dalla Amazon.Runtime.ClientConfig classe astratta dell'AWS SDK per .NET API Reference:
-
RetryModespecifica una delle tre modalità di riprova, definite nell'enumerazione. Amazon.Runtime.RequestRetryModeIl valore predefinito per l'applicazione può essere controllato utilizzando la variabile di
AWS_RETRY_MODEambiente o l'impostazione retry_mode nel file di configurazione condiviso. AWS
-
MaxErrorRetryspecifica il numero di tentativi consentiti a livello di client di servizio; l'SDK riprova l'operazione il numero di volte specificato prima di fallire e generare un'eccezione.Il valore predefinito per l'applicazione può essere controllato utilizzando la variabile di
AWS_MAX_ATTEMPTSambiente o l'impostazione max_attempts nel file di configurazione condiviso. AWS
Le descrizioni dettagliate di queste proprietà sono disponibili nella Amazon.Runtime.ClientConfig classe astratta dell'API Reference. AWS SDK per .NET Ogni valore di RetryMode corrisponde per impostazione predefinita a un valore particolare diMaxErrorRetry, come mostrato nella tabella seguente.
| RetryMode | Corrispondente MaxErrorRetry (Amazon DynamoDB) | Corrispondente MaxErrorRetry (tutti gli altri) |
|---|---|---|
| Legacy | 10 | 4 |
| Standard | 10 | 2 |
| Adattivo (sperimentale) | 10 | 2 |
Comportamento
All'avvio dell'applicazione
All'avvio dell'applicazione, i valori predefiniti RetryMode e MaxErrorRetry configurati dall'SDK. Questi valori predefiniti vengono utilizzati quando si crea un client di servizio, a meno che non si specifichino altri valori.
-
Se le proprietà non sono impostate nel tuo ambiente, l'impostazione predefinita per
RetryModeè configurata come Legacy e quella predefinita perMaxErrorRetryè configurata con il valore corrispondente della tabella precedente. -
Se la modalità di riprova è stata impostata nell'ambiente, tale valore viene utilizzato come predefinito per.
RetryModeL'impostazione predefinita perMaxErrorRetryè configurata con il valore corrispondente della tabella precedente, a meno che il valore per gli errori massimi non sia stato impostato anche nell'ambiente (descritto di seguito). -
Se il valore per gli errori massimi è stato impostato nell'ambiente, tale valore viene utilizzato come predefinito per
MaxErrorRetry. Amazon DynamoDB è l'eccezione a questa regola; il valore predefinito di DynamoDB perMaxErrorRetryè sempre il valore della tabella precedente.
Durante l'esecuzione dell'applicazione
Quando si crea un client di servizio, è possibile utilizzare i valori predefiniti per RetryMode eMaxErrorRetry, come descritto in precedenza, oppure è possibile specificare altri valori. Per specificare altri valori, crea e includi un oggetto di configurazione del servizio come AmazonDynamoDBConfig AmazonSQSconfig quando crei il client di servizio.
Questi valori non possono essere modificati per un client di servizio dopo che è stato creato.
Considerazioni
Quando si verifica un nuovo tentativo, la latenza della richiesta aumenta. Devi configurare i nuovi tentativi in base ai limiti dell'applicazione in termini di latenza della richiesta totale e percentuali di errore.
Timeout
AWS SDK per .NET Consente di configurare i timeout delle richieste a livello di client di servizio e per chiamata di metodo. Esistono due meccanismi per configurare i timeout, descritti nelle sezioni successive:
-
Se si utilizzano chiamate asincrone, è possibile utilizzare il parametro del
CancellationTokenmetodo. -
Se si utilizzano chiamate sincrone in .NET Framework, è possibile utilizzare le
ReadWriteTimeoutproprietàTimeoute della classe astratta. Amazon.Runtime.ClientConfig
Utilizzo del CancellationToken parametro per i timeout
AWS SDK per .NET Consente di configurare i timeout delle richieste sulle chiamate asincrone utilizzando il parametro. CancellationToken Il seguente frammento di codice mostra un esempio. Il codice viene generato System.Threading.Tasks.TaskCanceledException se la richiesta non viene completata entro 10 secondi.
string bucketName = "amzn-s3-demo-bucket"; string path = "pathToBucket"; using (var amazonS3Client = new AmazonS3Client(new AmazonS3Config())) { // Cancel request after 10 seconds CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(10000)); CancellationToken cancellationToken = cancellationTokenSource.Token; ListObjectsV2Request listRequestV2 = new() { BucketName = bucketName, Prefix = path, }; ListObjectsV2Response listResponseV2 = await amazonS3Client.ListObjectsV2Async(listRequestV2, cancellationToken); }
Utilizzo del Timeout e delle ReadWriteTimeout proprietà per i timeout
Nota
La Timeout proprietà non influisce sulle chiamate asincrone. Se stai usando chiamate asincrone, vedi invece. Utilizzo del CancellationToken parametro per i timeout
AWS SDK per .NET Consente di configurare i valori di timeout della richiesta e del socket read/write timeout a livello di client di servizio. Questi valori sono specificati nelle ReadWriteTimeout proprietà Timeout e nella classe astratta Amazon.Runtime.ClientConfig. Questi valori vengono trasmessi come ReadWriteTimeout proprietà Timeout e degli HttpWebRequest Timeout è di 100 secondi e il valore ReadWriteTimeout è di 300 secondi.
Se la rete ha una latenza elevata o se esistono condizioni che causano la ripetizione di un'operazione, l'utilizzo di valori lunghi per il timeout e di un elevato numero di tentativi può far sì che alcune operazioni dell'SDK sembrino non rispondere.
Nota
La versione destinata alla AWS SDK per .NET libreria di classi portatili (PCL) utilizza la HttpClient HttpWebRequest classe e supporta solo la proprietà
Di seguito sono elencate le eccezioni per i valori di timeout predefiniti. Questi valori vengono sovrascritti quando imposti esplicitamente i valori di timeout.
-
TimeouteReadWriteTimeoutsono impostati sui valori massimi se il metodo chiamato carica uno stream, ad esempio AmazonS3Client.PutObjectAsync (), (), AmazonS3Client.UploadPartAsync () e così via. AmazonGlacierClient.UploadArchiveAsync -
Le versioni di .NET Framework di destinazione sono impostate
Timeoute i valori massimiReadWriteTimeoutper tutti i client e gli oggetti https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Client.html AmazonS3Client. AWS SDK per .NET AmazonGlacierClient -
Le versioni destinate alla AWS SDK per .NET libreria di classi portatili (PCL) e .NET Core sono impostate sul valore massimo per tutti i client e
Timeoutgli oggetti AmazonS3Client. https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Client.html AmazonGlacierClient
L'esempio seguente mostra come specificare la modalità di riprova standard, un massimo di 3 tentativi, un timeout di 10 secondi e un read/write timeout di 10 secondi (se applicabile). Al costruttore AmazonS3Client viene assegnato un oggetto AmazonS3Config. https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Config.html
var s3Client = new AmazonS3Client( new AmazonS3Config { Timeout = TimeSpan.FromSeconds(10), // NOTE: The following property is obsolete for // versions of the AWS SDK per .NET that target .NET Core. ReadWriteTimeout = TimeSpan.FromSeconds(10), RetryMode = RequestRetryMode.Standard, MaxErrorRetry = 3 });