

Versi 4 (V4) dari AWS SDK untuk .NET telah dirilis\$1

Untuk informasi tentang melanggar perubahan dan memigrasi aplikasi Anda, lihat [topik migrasi](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html).

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

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
<a name="http2-support"></a>

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. TranscribeStreaming](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/TranscribeStreaming/NTranscribeStreaming.html)dan [Amazon. TranscribeStreamingRuang nama .Model](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/TranscribeStreaming/NTranscribeStreamingModel.html).

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. BedrockRuntime](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/BedrockRuntime/NBedrockRuntime.html)namespace, 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
<a name="http2-support-additional"></a>
+ 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](https://github.com/aws/aws-sdk-net/pull/3730) di [aws-sdk-net](https://github.com/aws/aws-sdk-net) GitHubrepositori.