View a markdown version of this page

Ritentativi e timeout - AWS SDK per .NET (V4)

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.

Orange button with text "Click here for details".

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.RequestRetryMode

    Il valore predefinito per l'applicazione può essere controllato utilizzando la variabile di AWS_RETRY_MODE ambiente 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_ATTEMPTS ambiente 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 per MaxErrorRetry è configurata con il valore corrispondente della tabella precedente.

  • Se la modalità di riprova è stata impostata nell'ambiente, tale valore viene utilizzato come predefinito per. RetryMode L'impostazione predefinita per MaxErrorRetry è 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 perMaxErrorRetry. Amazon DynamoDB è l'eccezione a questa regola; il valore predefinito di DynamoDB per MaxErrorRetry è 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:

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 oggetti creati dall'oggetto client del AWS servizio. Per impostazione predefinita, il valore 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 classe anziché la HttpWebRequest classe e supporta solo la proprietà Timeout.

Di seguito sono elencate le eccezioni per i valori di timeout predefiniti. Questi valori vengono sovrascritti quando imposti esplicitamente i valori di timeout.

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 });