

La AWS SDK pour .NET V3 est passée en mode maintenance.

Nous vous recommandons de migrer vers la version [AWS SDK pour .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html). Pour plus de détails et d'informations sur la façon de migrer, veuillez consulter notre [annonce relative au mode de maintenance](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Rétentatives et délais d'attente
<a name="retries-timeouts"></a>

Vous AWS SDK pour .NET permet de configurer le nombre de tentatives et les valeurs de délai d'expiration pour les requêtes HTTP adressées aux AWS services. Si les valeurs par défaut concernant les nouvelles tentatives et les délais d'expiration ne conviennent pas à votre application, vous pouvez les ajuster selon vos besoins spécifiques, mais il est important de comprendre en quoi le comportement de votre application en sera affecté.

Pour déterminer quelles valeurs utiliser pour les nouvelles tentatives et les délais d'expiration, prenez en compte les éléments suivants :
+ Comment l'application AWS SDK pour .NET et votre application doivent-elles réagir lorsque la connectivité réseau se dégrade ou qu'un AWS service est inaccessible ? Souhaitez-vous que l'appel échoue rapidement ou est-il indiqué que l'appel continue de faire l'objet de nouvelles tentatives en votre nom ?
+ Votre application est-elle une application ou un site web orienté vers l'utilisateur qui doit être réactive ou s'agit-il d'une tâche de traitement en arrière plan qui tolère davantage les latences accrues ?
+ L'application est-elle déployée sur un réseau fiable à faible latence ou est-elle déployée sur un site distant avec une connectivité peu fiable ?

## Nouvelles tentatives
<a name="retries"></a>

### Présentation de
<a name="w2aac11c13c11b5"></a>

Ils AWS SDK pour .NET peuvent réessayer les demandes qui échouent en raison d'un ralentissement côté serveur ou d'une interruption de connexion. Il existe deux propriétés des classes de configuration de service que vous pouvez utiliser pour spécifier le comportement d'un client de service en cas de nouvelle tentative. Les classes de configuration de service héritent de ces propriétés de l'abstrait [Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html)classe de l'[AWS SDK pour .NET API Reference](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/) :
+ `RetryMode`spécifie l'un des trois modes de nouvelle tentative définis dans [Amazon.Runtime. RequestRetryMode](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TRequestRetryMode.html)énumération.

  La valeur par défaut de votre application peut être contrôlée à l'aide de la variable d'`AWS_RETRY_MODE`environnement ou du paramètre *retry\$1mode* dans le fichier de configuration partagé AWS .
+ `MaxErrorRetry`indique le nombre de tentatives autorisées au niveau du client de service ; le SDK réessaie l'opération le nombre de fois spécifié avant d'échouer et de lancer une exception.

  La valeur par défaut de votre application peut être contrôlée à l'aide de la variable d'`AWS_MAX_ATTEMPTS`environnement ou du paramètre *max\$1attempts* du fichier de AWS configuration partagé.

Les descriptions détaillées de ces propriétés se trouvent dans le résumé [Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html)classe de l'[AWS SDK pour .NET API Reference](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/). Chaque valeur de `RetryMode` correspond par défaut à une valeur particulière de`MaxErrorRetry`, comme indiqué dans le tableau suivant.

|  |  |  | 
| --- |--- |--- |
| Héritée | 10 | 4 | 
| Standard | 10 | 2 | 
| Adaptatif (expérimental) | 10 | 2 | 

### Comportement
<a name="w2aac11c13c11b9"></a>

**Quand votre candidature démarre**

Lorsque votre application démarre, les valeurs par défaut pour `RetryMode` et `MaxErrorRetry` sont configurées par le SDK. Ces valeurs par défaut sont utilisées lorsque vous créez un client de service, sauf si vous spécifiez d'autres valeurs.
+ Si les propriétés ne sont pas définies dans votre environnement, la valeur par défaut `RetryMode` est configurée comme *Legacy* et la valeur par défaut pour `MaxErrorRetry` est configurée avec la valeur correspondante du tableau précédent.
+ Si le mode de nouvelle tentative a été défini dans votre environnement, cette valeur est utilisée par défaut pour`RetryMode`. La valeur par défaut pour `MaxErrorRetry` est configurée avec la valeur correspondante du tableau précédent, sauf si la valeur pour les erreurs maximales a également été définie dans votre environnement (décrit ci-dessous).
+ Si la valeur du maximum d'erreurs a été définie dans votre environnement, cette valeur est utilisée par défaut pour`MaxErrorRetry`. Amazon DynamoDB fait exception à cette règle ; la valeur DynamoDB par défaut `MaxErrorRetry` pour est toujours celle du tableau précédent.

**Pendant l'exécution de votre application**

Lorsque vous créez un client de service, vous pouvez utiliser les valeurs par défaut pour `RetryMode` et`MaxErrorRetry`, comme décrit précédemment, ou vous pouvez spécifier d'autres valeurs. Pour spécifier d'autres valeurs, créez et incluez un objet de configuration de service tel qu'[AmazonDynamoDBConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/DynamoDBv2/TDynamoDBConfig.html)[Amazon SQSConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SQS/TSQSConfig.html) lorsque vous créez le client de service.

Ces valeurs ne peuvent pas être modifiées pour un client de service après sa création.

**Considérations**

Lorsqu'une nouvelle tentative a lieu, la latence de votre demande augmente. Vous devez configurer les nouvelles tentatives en fonction des limites de votre application en termes de latence totale des demandes et de taux d'erreur.

## Délais
<a name="timeouts"></a>

Vous AWS SDK pour .NET permet de configurer les délais d'expiration des demandes au niveau du client de service et par appel de méthode. Il existe deux mécanismes pour configurer les délais d'expiration, qui sont abordés dans les sections suivantes :
+ Si vous utilisez des [appels asynchrones](#timeouts-async), vous pouvez utiliser le `CancellationToken` paramètre de la méthode.
+ Si vous utilisez des [appels synchrones dans .NET Framework](#timeouts-sync-framework), vous pouvez utiliser les `ReadWriteTimeout` propriétés `Timeout` et du fichier abstrait [Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html)classe.

### Utilisation du `CancellationToken` paramètre pour les délais
<a name="timeouts-async"></a>

Vous AWS SDK pour .NET permet de configurer les délais d'expiration des demandes pour les appels asynchrones à l'aide du paramètre. `CancellationToken` L'extrait de code suivant montre un exemple. Le code est lancé `System.Threading.Tasks.TaskCanceledException` si la demande n'est pas terminée dans les 10 secondes.

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

### Utilisation des `ReadWriteTimeout` propriétés `Timeout` et pour les délais d'expiration
<a name="timeouts-sync-framework"></a>

**Note**  
La `Timeout` propriété n'a aucun impact sur les appels asynchrones. Si vous utilisez des appels asynchrones, consultez [Utilisation du `CancellationToken` paramètre pour les délais](#timeouts-async) plutôt.

Vous AWS SDK pour .NET permet de configurer les valeurs du délai d'expiration de la demande et du read/write délai d'expiration du socket au niveau du client de service. Ces valeurs sont spécifiées dans les `ReadWriteTimeout` propriétés `Timeout` et du résumé [Amazon.Runtime. ClientConfig](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html)classe. Ces valeurs sont transmises sous forme de `ReadWriteTimeout` propriétés `Timeout` et des [HttpWebRequest](https://learn.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest)objets créés par l'objet client du AWS service. La valeur par défaut de `Timeout` est de 100 secondes et celle de `ReadWriteTimeout` est de 300 secondes.

Lorsque votre réseau présente une latence élevée ou qu'une opération fait l'objet d'une nouvelle tentative du fait de certaines conditions, un long délai d'expiration et un nombre élevé de nouvelles tentatives peuvent donner l'impression que certaines opérations du kit SDK ne répondent pas.

**Note**  
La version AWS SDK pour .NET qui cible la bibliothèque de classes portable (PCL) utilise la [HttpClient](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient)classe au lieu de la `HttpWebRequest` classe et ne prend en charge que la propriété [Timeout](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.timeout).

Vous trouverez ci-dessous les exceptions aux valeurs de délai d'expiration par défaut. Ces valeurs sont remplacées lorsque vous définissez explicitement les valeurs de délai d'expiration.
+ `Timeout`et `ReadWriteTimeout` sont définis sur les valeurs maximales si la méthode appelée télécharge un flux, tel que [AmazonS3Client. PutObjectAsync()](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/MS3PutObjectAsyncPutObjectRequestCancellationToken.html), client [Amazon S3. UploadPartAsync()](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/MS3UploadPartAsyncUploadPartRequestCancellationToken.html), [AmazonGlacierClient. UploadArchiveAsync()](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Glacier/MGlacierUploadArchiveAsyncUploadArchiveRequestCancellationToken.html), et ainsi de suite.
+ Les versions du .NET Framework cible AWS SDK pour .NET ont défini `Timeout` et `ReadWriteTimeout` atteint les valeurs maximales pour tous les clients et objets [AmazonS3Client](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Client.html). [AmazonGlacierClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Glacier/TGlacierClient.html)
+ Les versions AWS SDK pour .NET qui ciblent la bibliothèque de classes portable (PCL) et .NET Core sont définies `Timeout` sur la valeur maximale pour tous les clients et objets [AmazonS3Client](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Client.html). [AmazonGlacierClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Glacier/TGlacierClient.html)

L'exemple suivant vous montre comment définir le mode de nouvelle tentative *standard*, un maximum de 3 tentatives, un délai d'expiration de 10 secondes et un read/write délai d'expiration de 10 secondes (le cas échéant). [Le constructeur [AmazonS3Client](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Client.html) reçoit un objet AmazonS3Config.](https://docs.aws.amazon.com/sdkfornet/v3/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 pour .NET that target .NET Core.
    ReadWriteTimeout = TimeSpan.FromSeconds(10),
    RetryMode = RequestRetryMode.Standard,
    MaxErrorRetry = 3
  });
```