

のバージョン 4 (V4) AWS SDK for .NET がリリースされました。

重要な変更とアプリケーションの移行については、[「移行トピック](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)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# での HTTP 2 のサポート AWS SDK for .NET
<a name="http2-support"></a>

一部の AWS サービスとオペレーションには HTTP 2 が必要です。例えば、Amazon Transcribe Streaming の双方向ストリーミングは HTTP 1.1 では使用できないため、代わりに HTTP 2 が必要です。バージョン 4 で HTTP 2 のサポート AWS SDK for .NET が追加され、これらのオペレーションをアプリケーションで使用できるようになりました。双方向 HTTP 2 オペレーションの場合、ストリームを受信するときの SDK の動作は、HTTP 1.1 の動作と似ています。つまり、SDK を使用するアプリケーションがサービスにイベントを送信すると、リクエストには開発者によって割り当てられたパブリッシャーが割り当てられます。

この動作を実際に確認するには、Amazon Transcribe Streaming の次の例を検討してください。[Amazon.TranscribeStreaming](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/TranscribeStreaming/NTranscribeStreaming.html) および [Amazon.TranscribeStreaming.Model](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/TranscribeStreaming/NTranscribeStreamingModel.html) 名前空間を使用します。

この例では、開発者は .NET であるコールバック関数を使用して `StartStreamTranscriptionRequest.AudioStreamPublisher`プロパティを定義します`Func`。SDK は、 に`Func`定義された を使用して`AudioStreamPublisher`、ユーザーのコードからイベントをプルし、ユーザーにストリーミングします。SDK は null を返す`Func`まで を呼び出します。

このコードは、ファイルからの音声を Amazon Transcribe Streaming にストリーミングして処理する方法を示しています。

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

**警告**  
Amazon Bedrock の `InvokeModelWithBidirectionalStreamAsync`メソッド、Amazon[.BedrockRuntime](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/BedrockRuntime/NBedrockRuntime.html) 名前空間など、一部の双方向 HTTP 2 オペレーションは、一部のイベントが発行されるまで、サービスクライアントでの最初の呼び出しからのレスポンスを返しません。この動作により、アプリケーションがブロックされる可能性があります。この状況を回避するには、パブリッシャーにイベントを提供するアプリケーションコードを分離し、サービスクライアントでオペレーションを呼び出すスレッドとは異なるスレッドで実行します。

## 追加の考慮事項
<a name="http2-support-additional"></a>
+ AWS SDK for .NET HTTP 2 のサポートは、.NET 8 以降をターゲットとするバージョンでのみ使用できます。.NET Framework をターゲットとするバージョンでは利用できません。
+ 詳細については、[aws-sdk-net](https://github.com/aws/aws-sdk-net) GitHub リポジトリの[「PR 3730](https://github.com/aws/aws-sdk-net/pull/3730)」を参照してください。