Versi 4 (V4) dari AWS SDK untuk .NET telah dirilis!
Untuk informasi tentang melanggar perubahan dan memigrasi aplikasi Anda, lihat topik migrasi.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Support untuk HTTP 2 di AWS SDK untuk .NET
Beberapa AWS layanan dan operasi memerlukan HTTP 2. Misalnya, streaming dua arah di Amazon Transcribe Streaming tidak dimungkinkan melalui HTTP 1.1 sehingga memerlukan HTTP 2 sebagai gantinya. Versi 4 dari dukungan AWS SDK untuk .NET tambahan untuk HTTP 2 sehingga Anda dapat menggunakan operasi ini dalam aplikasi Anda. Untuk operasi HTTP 2 dua arah, perilaku SDK saat menerima aliran mirip dengan HTTP 1.1. Artinya, ketika aplikasi yang menggunakan SDK mengirim peristiwa ke layanan, permintaan memiliki penerbit yang ditetapkan oleh pengembang.
Untuk melihat perilaku ini beraksi, pertimbangkan contoh berikut untuk Amazon Transcribe Streaming. Ini menggunakan Amazon. TranscribeStreamingdan Amazon. TranscribeStreamingRuang nama .Model.
Dalam contoh ini, pengembang mendefinisikan StartStreamTranscriptionRequest.AudioStreamPublisher
properti dengan fungsi callback, yang merupakan .NET. Func
SDK menggunakan Func
definisi for AudioStreamPublisher
untuk menarik peristiwa dari kode pengguna untuk streaming ke pengguna. SDK memanggil Func
sampai mengembalikan null.
Kode menunjukkan bagaimana audio dari file dapat dialirkan ke Amazon Transcribe Streaming untuk diproses.
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) { }
Awas
Beberapa operasi HTTP 2 dua arah, seperti metode InvokeModelWithBidirectionalStreamAsync
dari Amazon Bedrock, Amazon. BedrockRuntimenamespace, jangan mengembalikan respons dari pemanggilan awal pada klien layanan sampai beberapa peristiwa telah diterbitkan. Perilaku ini dapat menyebabkan aplikasi Anda diblokir. Untuk menghindari situasi ini, pisahkan kode aplikasi yang menyediakan peristiwa ke penerbit, dan jalankan pada utas yang berbeda dari utas yang memanggil operasi pada klien layanan.
Pertimbangan tambahan
-
AWS SDK untuk .NET dukungan untuk HTTP 2 hanya tersedia dalam versi yang menargetkan .NET 8 dan di atasnya. Ini tidak tersedia dalam versi yang menargetkan .NET Framework.
-
Untuk informasi lebih rinci, lihat PR 3730
di aws-sdk-net GitHubrepositori.