grpc with aspnet core

2022. 5. 18. 00:00ASPNET/Grpc

반응형

aspnet core 를 통해 grpc server 를 생성 할 수 있다. 

 

 

Protos/greet.proto 수정

syntax = "proto3";

option csharp_namespace = "GrpcInterface"; // <--- change name

package greet;

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

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

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}

 

 

Program.cs  분석

using GrpcServerWithASPNet.Services;

var builder = WebApplication.CreateBuilder(args);

// Additional configuration is required to successfully run gRPC on macOS.
// For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682

// Add services to the container.
builder.Services.AddGrpc();

var app = builder.Build();

// Configure the HTTP request pipeline.
app.MapGrpcService<GreeterService>();
app.MapGet("/", () => "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");

app.Run();

Grpc service 를 지원하도록 Services 에 등록

 

GreeterService 를 endpoints 의 Mapping 하는 코드

 

Services/GreeterService.cs

using Grpc.Core;
using GrpcInterface;

namespace GrpcServerWithASPNet.Services
{
    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)
        {
            var httpContext = context.GetHttpContext();
            var clientCertificate = httpContext.Connection.ClientCertificate;

            return Task.FromResult(new HelloReply
            {
                Message = "Hello " + request.Name
            });
        }
    }
}

aspnet core 의 모든 기능을 사용할 수 있다. 

ILogger 를 통해서 Logging을 하고 있다. (Dependency Injection 이용)

ServerCallContext 를 통해 HttpContext 를 가져와서 client 와 관련된 정보를 얻어올 수 있다. 

var httpContext = context.GetHttpContext();
var clientCertificate = httpContext.Connection.ClientCertificate;

 

해당 server 를 호출 하기 위한 간단한 client

 

1. Console project 를 생성한다. 

2. GrpcClient 로 이름 정한 후 Create 한다. 

3. GrpcClient 에서 마우스 오른쪽 클릭 --> Add -->Connected Service 선택

4. Service References 에서 + 클릭

5. gRPC 선택 후 next

 

6. File  선택 후 Browse 

7. 이전에 만들었던 grpc server 의 위치로 이동 후 Protos/greet.proto 파일 선택

8. Finish

 

아래와 같이 구성되었는지 확인

 

Program.cs 로 이동 다음 코드 입력

using Grpc.Net.Client;
using GrpcInterface;

var channel = GrpcChannel.ForAddress("https://localhost:7253");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
                  new HelloRequest { Name = "나는 천재" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

 

서버 실행 후  client 도 실행

 

관련영상

https://youtu.be/a94iUMf72pc

 

 

반응형

'ASPNET > Grpc' 카테고리의 다른 글

gRPC - Configuration  (0) 2022.05.23
grpc test - grpcui  (0) 2022.05.20
grpc test - grpcurl  (0) 2022.05.19
grpc - console client  (0) 2022.05.17
grpc - console server  (0) 2022.05.16