A versão 4 (V4) do AWS SDK para .NET foi lançada!
Para obter informações sobre mudanças significativas e migrar seus aplicativos, consulte o tópico de migração.
As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Support para HTTP 2 no AWS SDK para .NET
Alguns AWS serviços e operações exigem HTTP 2. Por exemplo, o streaming bidirecional no Amazon Transcribe Streaming não é possível via HTTP 1.1 e, portanto, requer HTTP 2. A versão 4 do suporte AWS SDK para .NET adicional para HTTP 2 para que você possa usar essas operações em seus aplicativos. Para uma operação HTTP 2 bidirecional, o comportamento do SDK ao receber fluxos é semelhante ao do HTTP 1.1. Ou seja, quando aplicativos que usam o SDK enviam eventos para o serviço, a solicitação tem um editor atribuído pelo desenvolvedor.
Para ver esse comportamento em ação, considere o exemplo a seguir para o Amazon Transcribe Streaming. Ele usa a Amazon. TranscribeStreaminge Amazon. TranscribeStreaming.Espaços de nomes do modelo.
Neste exemplo, o desenvolvedor define a StartStreamTranscriptionRequest.AudioStreamPublisher
propriedade com uma função de retorno de chamada, que é um.NETFunc
. O SDK usa o for Func
definido AudioStreamPublisher
para extrair eventos do código do usuário para transmitir para o usuário. O SDK chama o Func
até que ele retorne nulo.
O código demonstra como o áudio de um arquivo pode ser transmitido para o Amazon Transcribe Streaming para processamento.
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) { }
Atenção
Algumas operações HTTP 2 bidirecionais, como o método InvokeModelWithBidirectionalStreamAsync
da Amazon Bedrock, a Amazon. BedrockRuntimenamespace, não retorne uma resposta da invocação inicial no cliente de serviço até que alguns eventos tenham sido publicados. Esse comportamento pode fazer com que seu aplicativo seja bloqueado. Para evitar essa situação, separe o código do aplicativo que fornece eventos ao editor e execute-o em um encadeamento diferente do encadeamento que invoca as operações no cliente do serviço.
Considerações adicionais
-
AWS SDK para .NET o suporte para HTTP 2 está disponível somente em versões voltadas para o.NET 8 e versões posteriores. Ele não está disponível em versões voltadas para o.NET Framework.
-
Para obter informações mais detalhadas, consulte PR 3730
no aws-sdk-net GitHubrepositório.