[gRPC] gRPC C# Server/Client 예제
- gRPC
- 2023. 2. 26. 18:28
참조
소개
- C#에서 간단한 gRPC Server/Client 예제 코드를 작성해 보았습니다.
개발 환경
- .NET Version : .NET 6
- 개발 도구 : Visual Studio 2022
gRPC 서버 설정
- 먼저, Visual Studio 2022를 이용하여 gRPC 서버 프로젝트를 생성합니다.
- gRPC 서버 프로젝트를 생성하려면, 기본적으로 ASP.NET Core가 설치되어 있어야 합니다.
- 다음과 같이 gRPC 서버 프로젝트를 생성합니다.
환경 설정
- 기본적으로 gRPC 서버를 생성하게 되면, Properties, Protos, Services, Program.cs 폴더 및 파일들이 생성됩니다.
- 여기서 launchSettings.json 파일의 applicationUrl 만 본인이 원하는 주소로 설정합니다.
{
"profiles": {
"gRPCServer": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "https://localhost:5001",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
gRPC Client 생성
- 다음으로 C# 콘솔 프로젝트를 생성하여 gRPC Client 프로젝트를 생성합니다.
- 생성이 완료 되면, Protos/greet.proto 폴더및 proto 파일을 생성합니다.
- greet.proto 파일 내용은 아래와 같이 작성합니다.
syntax = "proto3";
option csharp_namespace = "gRPCTest";
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 에 아래 코드를 작성합니다.
- 참고로, GRPC.Tools NuGet Package 도 설치했습니다.
- GRPC.Tools NuGet Package 가 설치된 후, gRPCclient.csproj 프로젝트에 GRPC NuGet 패키지 관련 항목들을 추가해 줍니다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Grpc.Net.Client" Version="2.43.0" />
<PackageReference Include="Grpc.Tools" Version="2.44.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<!-- protobuf 추가 -->
<Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
<PackageReference Include="Grpc.AspNetCore" Version="2.28.0" />
<PackageReference Include="Google.Protobuf" Version="3.11.4" />
<PackageReference Include="Grpc.Net.Client" Version="2.31.0" />
<PackageReference Include="Grpc.Tools" Version="2.28.1" />
</ItemGroup>
</Project>
- 마지막으로 Program.cs 코드를 아래와 같이 작성합니다.
using Grpc.Net.Client;
using gRPCTest;
using var httpClientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
using var httpClient = new HttpClient(httpClientHandler);
using var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions { HttpClient = httpClient });
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
프로젝트 구성
- 프로젝트 구성을 보게 되면 Server/Client 2개의 프로젝트로 구성된 것을 확인할 수 있습니다.
- 이제 Server를 먼저 실행한 후, Client를 실행하여 Server 로부터 받은 메시지가 Client 로 전송되어 출력 되는지 확인합니다.
실행 결과
- 정상적으로 메시지가 출력 되는 것을 확인할 수 있습니다.
728x90
'gRPC' 카테고리의 다른 글
[gRPC] .NET Core 에서 gRPC 오류 처리하는 방법 (0) | 2023.03.01 |
---|---|
[인공지능] Tensorflow Serving gRPC C# 구현 (0) | 2023.02.27 |
[C#] .NET FileUpload gPRC Service Poc (0) | 2023.02.02 |
[C#] .NET의 gRPC 인터셉터 - 클라이언트 측 인터셉터 (0) | 2022.04.27 |
[C#] .NET의 gRPC 서버 측 인터셉터 (0) | 2022.04.22 |
이 글을 공유하기