[C# gRPC] Blazor Server 앱 - gRPC Client 생성
- C#
- 2022. 4. 7. 22:16
목적
- 앞에서 ASP.NET Core gRPC Server 프로젝트를 생성하여 gRPC 전용 Server를 만들었습니다.
- 다음으로 Blazor Client를 하나 생성하여 gRPC Server 와 통신하는 Client 프로그램을 만들어 보도록 하겠습니다.
개발 환경
- 개발 환경은 다음과 같습니다.
- OS : Windows 10
- .NET Version : .NET 6
- 개발도구 : Visual Studio 2022
Blazor Server 앱 프로젝트 생성
- Blazor gRPC Client 를 만들기 위해서는 Visual Studio 2022 실행합니다.
- 실행하여 Blazor Server 앱 프로젝트 하나를 선택하여 생성해줍니다.
gRPC NuGet 패키지 추가
- Blazor Server 앱을 생성 하였다면, gRPC 통신을 위하여 몇 가지 NuGet Package 를 설치해야 합니다.
- 총 3개의 NuGet Package 를 설치해 줍니다.
- Grpc.Net.Client
- Grpc.Tools
- Google.ProtoBuf
- 위의 3개의 NuGet Package 항목을 설치해야 gRPC 관련 라이브러리들을 사용할 수 있습니다.
Protocol Buffer 추가
- gRPC Client 프로젝트에도 Server 와 동일한 Protocol Buffer 를 추가해야 합니다.
- Protos 폴더를 생성 후, greet.proto 파일을 추가합니다.
- greet.proto 파일 내용은 다음과 같습니다.
- charp_namespace 이름은 자유롭게 변경해 주어도 괜찮습니다.
syntax = "proto3";
option csharp_namespace = "BlazorClient";
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;
}
GrpcServices 이름 변경
- 앞서, greet.proto 프로토버퍼 파일을 추가하였습니다.
- 다음으로 BlazorClient.csproj 프로젝트 파일을 선택하여 GrpcServices 이름을 Client 로 변경합니다.
...생략
<ItemGroup>
<Protobuf Include="..\ProtocolBuffer\Protos\greet.proto" GrpcServices="Client">
<Link>Protos\greet.proto</Link>
</Protobuf>
</ItemGroup>
Data 폴더에 GreeterServices.cs 추가
- GrpcServices 이름 변경이 완료 되었다면, 이제 gRPC Server 에게 메시지를 보낼 서비스를 생성합니다.
- Blazor Server 앱을 설치하게 되면, 기본으로 Data 폴더가 생성됩니다.
- Data 폴더에 GreeterService.cs 클래스를 추가하고, 다음과 같이 코드를 작성해 줍니다.
GreeterServices.cs
- 앞서 Server 에서도 SayHello 메서드가 있었습니다.
- Server 에서는 Client 가 보내는 메시지를 받아서 받은 메시지를 다시 반환해 주었습니다.
- Client 에서 SayHello 메시지는 gRPC Server 에게 메시지를 전달하는 역할을 합니다.
- HelloRequest 메서드를 통해 Client 는 Server 에서 메시지를 전달합니다.
- gRPC Server 가 정상적으로 메시지를 받게 되면, Client 는 다시 해당 메시지를 반환해줍니다.
using Grpc.Net.Client;
namespace BlazorClient.Data
{
public class GreeterService
{
public async Task<string> SayHello(string name)
{
using var httpClientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
using var httpClient = new HttpClient(httpClientHandler);
using var channel = GrpcChannel.ForAddress("https://localhost:7005", new GrpcChannelOptions { HttpClient = httpClient });
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = name });
return reply.Message;
}
}
}
Greeter 페이지 추가
- 다음으로는 Blazor Client UI 에 Greeter 페이지를 추가해줍니다.
- Greeter 페이지 추가는 Pages 폴더에 Greeter.razor 프로젝트를 추가합니다.
- 그리고 아래와 같이 소스코드를 작성해 줍니다.
- @code 부분에 Server로 부터 반환 받은 메시지를 출력해 주는 SayHello() 메서드를 작성하였습니다.
@page "/greeter"
<PageTitle>Weather forecast</PageTitle>
@using BlazorClient.Data
@inject GreeterService GreeterService
<h1>grpc Connection</h1>
<input type="text" @bind="@Name" />
<button @onclick="@SayHello">Say Hello</button>
<p role="status">@Greeting</p>
@code {
string Name = string.Empty;
string Greeting = string.Empty;
async public void SayHello()
{
this.Greeting = await this.GreeterService.SayHello(this.Name);
}
}
GreeterService 컨테이너 추가
- program.cs 에서 GreeterService 컨테이너를 추가합니다.
using BlazorClient.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>();
builder.Services.AddSingleton<GreeterService>();
...생략....
실행 결과
- 코드 작성은 모두 완료 되었습니다.
- 실제로 Blazor Client를 실행하여 gRPC Server 로 메시지를 보내서 결과가 제대로 출력 되는지 확인 합니다.
- 실행 결과, 보낸 메시지를 gRPC Server 가 잘 받아서 다시 Client 로 보내서 출력 되는 것을 확인할 수 있습니다.
728x90
'C#' 카테고리의 다른 글
[C#] Npgsql NuGet Package 이용하여 PostgreSQL 연동하기 (0) | 2022.04.11 |
---|---|
[C# gRPC] 클래스 라이브러리 생성 후, protocol buffer(.proto) 파일 관리 (0) | 2022.04.09 |
[C#] ASP.NET Core gRPC Server - gRPC 서버 생성 (3) | 2022.04.07 |
[C# 문법] C# 7.0 에서 편리해진 out 파라미터 사용방법 (0) | 2021.05.23 |
MSDN C# 명명지침 (1) | 2021.05.19 |
이 글을 공유하기