WCF と gRPC の比較Comparing WCF to gRPC

前の章では、Protobuf と gRPC がメッセージを処理する方法について詳しく説明しました。The previous chapter gave you a good look at Protobuf and how gRPC handles messages. Windows Communication Foundation (WCF) から gRPC への詳細な変換を行う前に、gRPC で WCF で利用可能な機能がどのように処理されるか、および同等の gRPC がない場合に使用できる回避策について理解しておく必要があります。Before you work through a detailed conversion from Windows Communication Foundation (WCF) to gRPC, it's important know how the features available in WCF are handled in gRPC and what workarounds you can use when there's no gRPC equivalent. 特に、この章では次の項目について説明します。In particular, this chapter will cover the following subjects:

  • 操作とメソッドOperations and methods
  • バインドとトランスポートBindings and transports
  • RPC の種類RPC types
  • メタデータMetadata
  • エラー処理Error handling
  • WS-MANAGEMENT プロトコル*WS-* protocols

gRPC の例gRPC example

Visual Studio 2019 またはコマンドラインから新しい ASP.NET Core 3.0 gRPC プロジェクトを作成すると、"Hello World" に相当する gRPC が生成されます。When you create a new ASP.NET Core 3.0 gRPC project from Visual Studio 2019 or the command line, the gRPC equivalent of "Hello World" is generated for you. これは、サービスとそのメッセージを定義する greeter.proto ファイルと、サービスを実装する GreeterService.cs ファイルで構成されます。It consists of a greeter.proto file that defines the service and its messages, and a GreeterService.cs file with an implementation of the service.

syntax = "proto3";

option csharp_namespace = "HelloGrpc";

package Greet;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message that contains the user's name.
message HelloRequest {
  string name = 1;
}

// The response message that contains the greetings.
message HelloReply {
  string message = 1;
}
using System.Threading.Tasks;
using Grpc.Core;
using Microsoft.Extensions.Logging;

namespace HelloGrpc
{
    public class GreeterService : Greeter.GreeterBase
    {
        private readonly ILogger<GreeterService> _logger;
        public GreeterService(ILogger<GreeterService> logger)
        {
            _logger = logger;
        }

        public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
        {
            return Task.FromResult(new HelloReply
            {
                Message = "Hello " + request.Name
            });
        }
    }
}

この章では、gRPC のさまざまな概念と機能について説明するときに、このコード例を参照します。This chapter will refer to this example code when explaining different concepts and features of gRPC.