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à.
Tentativi e timeout
AWS SDK for .NETConsente 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:
-
Come devono reagire l'applicazione AWS SDK for .NET e la vostra applicazione quando la connettività di rete peggiora o un AWS servizio non è raggiungibile? 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 viene distribuita in una posizione remota con connettività inaffidabile?
Tentativi
Panoramica
AWS SDK for .NETPossono riprovare le richieste che non vanno a buon fine 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 di ripetizione dei tentativi di un client di servizio. Le classi di configurazione del servizio ereditano queste proprietà dall'astratto Amazon.Runtime. ClientConfigclasse dell'API Reference: AWS SDK for .NET
-
RetryMode
specifica una delle tre modalità di riprova, definite in Amazon.Runtime. RequestRetryModeenumerazione.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
-
MaxErrorRetry
specifica 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 nell'estratto Amazon.Runtime. ClientConfigclasse dell'API Reference. AWS SDK for .NET Ogni valore di RetryMode
corrisponde per impostazione predefinita a un particolare valore diMaxErrorRetry
, come illustrato nella tabella seguente.
RetryMode | Corresponding MaxErrorRetry (Amazon DynamoDB) | Corresponding MaxErrorRetry (all others) |
---|---|---|
Legacy | 10 | 4 |
Standard | 10 | 2 |
Adaptive (experimental) | 10 | 2 |
Comportamento
All'avvio dell'applicazione
All'avvio dell'applicazione, i valori predefiniti per RetryMode
e MaxErrorRetry
vengono 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 nell'ambiente, l'impostazione predefinita per
RetryMode
è configurata come Legacy e l'impostazione predefinita perMaxErrorRetry
è configurata con il valore corrispondente della tabella precedente. -
Se la modalità di riprova è stata impostata nell'ambiente in uso, tale valore viene utilizzato come valore predefinito per.
RetryMode
Il valore predefinito perMaxErrorRetry
è configurato con il valore corrispondente della tabella precedente, a meno che nell'ambiente in uso non sia stato impostato anche il valore per il numero massimo di errori (descritto di seguito). -
Se il valore per il numero massimo di errori è stato impostato nell'ambiente, tale valore viene utilizzato come valore predefinito per
MaxErrorRetry
. Amazon DynamoDB è l'eccezione a questa regola; il valore DynamoDB predefinitoMaxErrorRetry
per è 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 specificare altri valori. Per specificare altri valori, crea e includi un oggetto di configurazione del servizio come AmazonDynamodbConfig o AmazonSQSCONfig quando crei il client del servizio.
Questi valori non possono essere modificati per un client di servizio dopo la sua creazione.
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 for .NETConsente di configurare il timeout della richiesta e i valori di timeout di lettura/scrittura del socket a livello del client di servizio. Questi valori sono specificati nelle ReadWriteTimeout
proprietà Timeout
e dell'oggetto astratto Amazon.Runtime. ClientConfigclasse. Questi valori vengono trasmessi come ReadWriteTimeout
proprietà Timeout
e degli HttpWebRequestTimeout
è 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 di destinata alla AWS SDK for .NET Portable Class Library (PCL) utilizza la HttpClientHttpWebRequest
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.
-
Timeout
eReadWriteTimeout
sono impostati sui valori massimi se il metodo chiamato carica uno stream, come AmazonS3Client. PutObjectAsync(), client Amazon S3. UploadPartAsync(),. AmazonGlacierClient UploadArchiveAsync() e così via. -
Le versioni di destinazione.NET Framework impostate
Timeout
eReadWriteTimeout
impostano i valori massimi per tutti gli Amazons3Client e gli oggetti. AWS SDK for .NET AmazonGlacierClient -
Le versioni destinate alla AWS SDK for .NET Portable Class Library (PCL) e.NET Core sono impostate sul valore massimo per tutti gli
Timeout
AmazonS3Client e gli oggetti. AmazonGlacierClient
Esempio
L'esempio seguente mostra come specificare la modalità di riprova standard, un massimo di 3 tentativi, un timeout di 10 secondi e un timeout di lettura/scrittura di 10 secondi (se applicabile). Al costruttore AmazonS3Client viene assegnato un oggetto AmazonS3Config.
var s3Client = new AmazonS3Client( new AmazonS3Config { Timeout = TimeSpan.FromSeconds(10), // NOTE: The following property is obsolete for // versions of the AWS SDK for .NET that target .NET Core. ReadWriteTimeout = TimeSpan.FromSeconds(10), RetryMode = RequestRetryMode.Standard, MaxErrorRetry = 3 });