La version 4 (V4) du AWS SDK pour .NET est sortie !
Pour plus d'informations sur les modifications majeures et la migration de vos applications, consultez la rubrique relative à la migration.
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.
Support du protocole HTTP 2 dans AWS SDK pour .NET
Certains AWS services et opérations nécessitent le protocole HTTP 2. Par exemple, le streaming bidirectionnel dans Amazon Transcribe Streaming n'est pas possible via HTTP 1.1 et nécessite donc le protocole HTTP 2 à la place. La version 4 de la prise en charge du protocole HTTP 2 AWS SDK pour .NET a été ajoutée afin que vous puissiez utiliser ces opérations dans vos applications. Pour une opération HTTP 2 bidirectionnelle, le comportement du SDK lors de la réception de flux est similaire à celui du protocole HTTP 1.1. En d'autres termes, lorsque les applications qui utilisent le SDK envoient des événements au service, un éditeur est attribué par le développeur à la demande.
Pour voir ce comportement en action, considérez l'exemple suivant pour Amazon Transcribe Streaming. Il utilise l'Amazon. TranscribeStreaminget Amazon. TranscribeStreaming.Espaces de noms du modèle.
Dans cet exemple, le développeur définit la StartStreamTranscriptionRequest.AudioStreamPublisher
propriété avec une fonction de rappel, qui est un .NETFunc
. Le SDK utilise le for Func
défini AudioStreamPublisher
pour extraire les événements du code de l'utilisateur afin de les diffuser à l'utilisateur. Le SDK appelle le Func
jusqu'à ce qu'il renvoie null.
Le code montre comment le son d'un fichier peut être diffusé dans Amazon Transcribe Streaming pour y être traité.
using Amazon; using Amazon.TranscribeStreaming; using Amazon.TranscribeStreaming.Model; CancellationTokenSource cancelSource = new CancellationTokenSource(); var client = new AmazonTranscribeStreamingClient(RegionEndpoint.USEast1); var startRequest = new StartStreamTranscriptionRequest { LanguageCode = LanguageCode.EnUS, MediaEncoding = MediaEncoding.Flac, MediaSampleRateHertz = 44100, NumberOfChannels = 2, EnableChannelIdentification = true }; Stream fileStream = File.OpenRead("hello-world.flac"); var buffer = new byte[1024 * 10]; startRequest.AudioStreamPublisher += async () => { var bytesRead = await fileStream.ReadAsync(buffer, 0, buffer.Length); if (bytesRead == 0) return null; var audioEvent = new AudioEvent { AudioChunk = new MemoryStream(buffer, 0, bytesRead) }; return audioEvent; }; using var response = await client.StartStreamTranscriptionAsync(startRequest); Console.WriteLine(response.HttpStatusCode); response.TranscriptResultStream.ExceptionReceived += TranscriptResultStream_ExceptionReceived; response.TranscriptResultStream.TranscriptEventReceived += TranscriptResultStream_TranscriptEventReceived; void TranscriptResultStream_ExceptionReceived(object? sender, Amazon.Runtime.EventStreams.EventStreamExceptionReceivedArgs<TranscribeStreamingEventStreamException> e) { Console.WriteLine(e.EventStreamException.Message); cancelSource.Cancel(); } void TranscriptResultStream_TranscriptEventReceived(object? sender, Amazon.Runtime.EventStreams.EventStreamEventReceivedArgs<TranscriptEvent> e) { foreach (var result in e.EventStreamEvent.Transcript.Results) { if (!string.Equals("ch_0", result.ChannelId, StringComparison.OrdinalIgnoreCase)) continue; var text = result.Alternatives[0].Transcript; if (!string.IsNullOrEmpty(text)) { Console.WriteLine(text); } } } _ = response.TranscriptResultStream.StartProcessingAsync(); try { await Task.Delay(10000, cancelSource.Token); } catch (TaskCanceledException) { }
Avertissement
Certaines opérations HTTP 2 bidirectionnelles, telles que la InvokeModelWithBidirectionalStreamAsync
méthode d'Amazon Bedrock, Amazon. BedrockRuntimeespace de noms, ne renvoyez pas de réponse depuis l'appel initial sur le client de service tant que certains événements n'ont pas été publiés. Ce comportement peut entraîner le blocage de votre application. Pour éviter cette situation, séparez le code de l'application qui fournit les événements à l'éditeur et exécutez-le sur un thread différent du thread qui appelle les opérations sur le client de service.
Considérations supplémentaires
-
AWS SDK pour .NET la prise en charge de HTTP 2 n'est disponible que dans les versions qui ciblent .NET 8 et versions ultérieures. Il n'est pas disponible dans les versions qui ciblent .NET Framework.
-
Pour des informations plus détaillées, voir PR 3730
dans le aws-sdk-net GitHubréférentiel.