다음을 통해 공유


.NET Standard 2.0에서 gRPC 클라이언트 사용

작성자: James Newton-King

이 문서에서는 .NET Standard 2.0을 지원하는 .NET 구현에서 .NET gRPC 클라이언트를 사용하는 방법을 설명합니다.

.NET 구현체

다음 .NET 구현(또는 이후 버전)은 Grpc.Net.Client를 지원하지만 HTTP/2를 완전히 지원하지 않습니다.

  • .NET Core 2.1
  • .NET Framework 4.6.1
  • Mono 5.4
  • Xamarin.iOS 10.14
  • Xamarin.Android 8.0
  • 유니버설 Windows 플랫폼 10.0.16299
  • Unity 2018.1

.NET gRPC 클라이언트는 몇 가지 추가 구성을 사용하여 이러한 .NET 구현에서 서비스를 호출할 수 있습니다.

HttpHandler 구성

HTTP 공급자는 GrpcChannelOptions.HttpHandler를 사용하여 구성해야 합니다. 처리기가 구성되지 않은 경우 오류가 throw됩니다.

System.PlatformNotSupportedException: gRPC는 HTTP/2를 통한 gRPC를 지원하지 않는 .NET 구현에서 RPC 호출을 성공적으로 수행하기 위해 추가 구성이 필요합니다. HTTP 공급자는 GrpcChannelOptions.HttpHandler를 사용하여 지정해야 합니다. 구성된 HTTP 공급자는 HTTP/2를 지원하거나 gRPC-Web을 사용하도록 구성해야 합니다.

UWP, Xamarin 및 Unity와 같이 HTTP/2를 지원하지 않는 .NET 구현은 gRPC-Web을 대안으로 사용할 수 있습니다.

var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpHandler = new GrpcWebHandler(new HttpClientHandler())
    });

var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = ".NET" });

클라이언트는 gRPC 클라이언트 팩터리를 사용하여 만들 수도 있습니다. HTTP 공급자는 ConfigurePrimaryHttpMessageHandler 확장 메서드를 사용하여 구성됩니다.

builder.Services
    .AddGrpcClient<Greet.GreeterClient>(options =>
    {
        options.Address = new Uri("https://localhost:5001");
    })
    .ConfigurePrimaryHttpMessageHandler(
        () => new GrpcWebHandler(new HttpClientHandler()));

자세한 내용은 .NET gRPC 클라이언트를 사용하여 gRPC-Web 구성을 참조하세요.

Important

gRPC-Web을 지원하려면 클라이언트 서버가 필요합니다. gRPC-Web은 ASP.NET Core gRPC 서버에서 신속하게 구성할 수 있습니다. 다른 gRPC 서버 구현에는 gRPC-Web을 지원하는 프록시가 필요합니다.

.NET Framework

.NET Framework는 HTTP/2를 통한 gRPC를 제한적으로 지원합니다. .NET Framework에서 HTTP/2를 통해 gRPC를 활성화하려면 WinHttpHandler를 사용하도록 채널을 구성합니다.

WinHttpHandler 사용에 대한 요구 사항 및 제한 사항:

  • Windows 11 이상, Windows Server 2019 이상
    • gRPC 클라이언트는 Windows 11 이상에서 완전히 지원됩니다.
    • gRPC 클라이언트는 Windows Server 2019 및 Windows Server 2022에서 부분적으로 지원됩니다. 단항 및 서버 스트리밍 메서드가 지원됩니다. 클라이언트 및 양방향 스트리밍 메서드는 지원되지 않습니다 .
  • System.Net.Http.WinHttpHandler 버전 6.0.1 이상에 대한 참조입니다.
  • GrpcChannelOptions.HttpHandler를 사용하여 채널에서 WinHttpHandler를 구성합니다.
  • .NET Framework 4.6.1 이상.
  • TLS를 통한 gRPC 호출만 지원됩니다.
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpHandler = new WinHttpHandler()
    });

var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = ".NET" });

gRPC C# 핵심 라이브러리

.NET Framework 및 Xamarin의 대체 옵션은 gRPC C# 코어 라이브러리를 사용하여 gRPC를 호출하는 것이었습니다. gRPC C# 핵심 라이브러리는:

  • .NET Framework 및 Xamarin에서 HTTP/2를 통한 gRPC 호출을 지원하는 타사 라이브러리입니다.
  • Microsoft에서 지원하지 않습니다.
  • 유지 관리 모드이며 ..NET용 gRPC에서 더 이상 사용되지 않습니다.
  • 새 앱에는 사용하지 않는 것이 좋습니다.

추가 리소스