그림 분석 ASP.NET Core 도입 gRPC 서비스 템 플 릿
gRPC 의 간단 한 소개
gRPC 는 언어 와 무관 한 고성능 원 격 프로 세 스 호출(RPC)프레임 워 크 입 니 다.gRPC 기초 지식 에 대한 자세 한 정 보 는gRPC 문서 페이지참조 하 시기 바 랍 니 다.
gRPC 의 주요 장점 은:
gRPC 서비스 만 들 기
1.VS 2019 를 열 고 Visual Studio'파일'메뉴 에서'새로 만 들 기'>'항목'을 선택 하 십시오.(나 는 새로 연 VS 이기 때문에 다음 그림 과 같이 새 항목 을 만 듭 니 다)
2.다음 그림 에서 보 듯 이'ASP.NET Core 웹 애플 리 케 이 션'을 만 들 고 다음 을 클릭 합 니 다.
3.이 페이지 는 아래 그림 에서 보 듯 이 항목 이름,위치,솔 루 션 이름 을 입력 한 다음 오른쪽 아래 에 있 는'생 성'단 추 를 누 르 면 생 성 됩 니 다.
4.위 단계 에서'생 성'을 누 르 면 끝 날 것 같 습 니까?gRPC 서비스 템 플 릿 을 만 들 기로 했 습 니 다.따라서 위 에 있 는 생 성 을 클릭 하면 다음 그림 과 같이 팝 업 됩 니 다.서비스 템 플 릿 의 창 을 선택 하 라 고 했 습 니 다.여 기 는 아래 그림 에 따라 gRPC 서비스 템 플 릿 을 선택 한 다음 오른쪽 아래 에 있 는 생 성 을 다시 클릭 하 는 것 이 진정한 생 성 항목 입 니 다.
5.생 성 에 성공 하면 다음 그림 과 같은 프로젝트 구조 가 나타 납 니 다.
6.이로써 우 리 는 gRPC 서비스의 템 플 릿 을 만 들 었 습 니 다.그 다음 에 테스트 를 한 다음 에 이 템 플 릿 의 구 조 를 잘 보 겠 습 니 다.
테스트 gRPC 서비스
1.먼저
HelloGrpc.Server
이 서버 의 작업 디 렉 터 리 를 열 고Shift+
아래 그림 과 같은 오른쪽 단추 메뉴 를 팝 업 합 니 다.그림 과 같이 ps 창 을 엽 니 다.2.입력
dotnet run
명령 은 이 gRPC 서버 항목 을 실행 합 니 다.아래 그림 에서 보 듯 이 서버 가 정상적으로 작 동 하고 해당 하 는 포트 를 감청 하기 시작 합 니 다.3.똑 같은 방법 으로 클 라 이언 트 를 시작 합 니 다.이때 클 라 이언 트 는 이 서버 에'GreeterClient'라 는 메 시 지 를 포함 한 인사 메 시 지 를 보 냅 니 다.이 서버 는 응답 으로"Hello GreeterClient"메 시 지 를 보 내 고 명령 프롬프트 에 표 시 됩 니 다.다음 그림 에서 보 듯 이:
4.이로써 gRPC 서비스 템 플 릿 이 만 든 서버 와 클 라 이언 트 테스트 에 성 공 했 습 니 다.다음은 이 서비스 템 플 릿 을 잘 살 펴 보 자.
gRPC 템 플 릿 분석
HelloGrpc.Server
서비스의 엔 드 항목 에는 다음 과 같은 몇 가지 파일 이 있 습 니 다.Greeter
gRPC 이 며,gRPC 서버 자산 생 성 에 사 용 됩 니 다.Greeter
서비스의 실현 을 포함 합 니 다.IWebHostBuilder
의 시작 프로필 은 응용 행 위 를 설정 하 는 코드 를 포함 합 니 다.(ASP.NET Core 에 익숙 한 당신 은 분명 익숙 할 것 입 니 다.HelloGrpc.Client
파일:Program.cs 는 gRPC 클 라 이언 트 의 입구 점 과 논 리 를 포함 합 니 다.
다음은 모든 서 류 를 열 어 안에 무엇이 들 어 있 는 지 살 펴 보 자.
proto 파일
proto
GRPC 는 약 정 된 우선 API 개발 방법 을 사용한다.기본적으로 프로 토 콜 버퍼(Protobuf)를 인터페이스 디자인 언어(IDL)로 사용 합 니 다.이
.proto
파일 은 다음 을 포함 합 니 다:우리 템 플 릿 에서 만 든
greet.proto
파일 의 내용 은 다음 과 같 습 니 다.
syntax = "proto3";
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;
}
Greeter
서비스.Greeter
서비스 정의SayHello
요청 입 니 다.SayHello
메 시 지 를 보 내 고 받 기HelloRequest
메시지:HelloResponse
의 ItemGroup 에 추가 하면 됩 니 다.
<ItemGroup>
<Protobuf Include="..\Protos\*.proto" GrpcServices="Server" />
<Content Include="@(Protobuf)" LinkBase="" />
</ItemGroup>
C\#.proto 파일 에 대한 도구 지원공구 꾸러미Grpc.Tools는.proto 파일 에서 C\#파일 을 만 드 는 데 사 용 됩 니 다.생 성 된 자산(파일)은 다음 과 같은 특성 을 가지 고 있 습 니 다.
<Protobuf>
VisualStudio 에서 패키지 관리 자 를 사용 하거나 프로젝트 파일 에 추가 할 수 있 습 니 다.XML 복사
<PackageReference Include="Grpc.Tools" Version="1.19.0-pre1" PrivateAssets="All" />
공구 꾸러미 가 실 행 될 때 필요 한 것 이 아니 므 로 사용 해 야 합 니 다Grpc.Tools
.Services 폴 더 의 구체 적 인 gRPC 서비스
우 리 는
<PackageReference>
공구 꾸러미 가.proto 파일 의 정의 에 따라 번역 되 고 해당 하 는 C\#형식의 파일 을 생 성 할 것 이라는 것 을 알 고 있 습 니 다.서버 쪽 자산 에 대해 추상 적 인 서비스 기본 유형 을 생 성 할 것 입 니 다.기본 형식 은.proto 파일 에 포 함 된 모든 GRPC 호출 에 대한 정 의 를 포함 합 니 다.그 다음 에 귀 하 는 이 기본 유형의 파생 된 구체 적 인 서 비 스 를 만 들 고 GRPC 호출 논 리 를 실현 할 것 입 니 다.앞에서 설명 한
PrivateAssets="All"
예제 에 대해 가상Grpc.Tools
방법 을 포함 한 추상greet.proto
유형 을 생 성 할 것 이다.구체 적 인 실현SayHello
은 이 방법 을 다시 쓰 고 GRPC 호출 을 처리 하 는 논 리 를 실현 한다.GreeterBase
프로젝트 의GreeterService
코드 와 같 습 니 다.
public class GreeterService : Greeter.GreeterBase
{
public override Task<HelloReply>
SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
클 라 이언 트 에 대해 서 는 구체 적 인 클 라 이언 트 유형의 GRPC 호출 을 생 성 합 니 다.proto 파일 은 호출 가능 한 구체 적 인 형식 으로 변환 되 었 습 니 다.HelloGrpc.Server
앞에서 설명 한 예 시 를 위해 구체 적 인Services\GreeterService.cs
유형 이 생 성 됩 니 다.이greet.proto
유형 은 서버 에 대한 GRPC 호출 을 시작 하기 위해GreeterClient
방법 을 포함 하고 있 습 니 다.
public class Program
{
static async Task Main(string[] args)
{
// Include port of the gRPC server as an application argument
var port = args.Length > 0 ? args[0] : "50051";
var channel = new Channel("localhost:" + port, ChannelCredentials.Insecure);
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
await channel.ShutdownAsync();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
기본적으로 서버 와 클 라 이언 트 자산 을 각각 생 성 합 니 다.proto 파일 은GreeterClient
프로젝트 그룹 에 포함 되 어 있 습 니 다.서버 프로젝트 에서 만 서버 자산 을 생 성 하려 면SayHello
속성 설정<Protobuf>
.XML 복사
<ItemGroup>
<Protobuf Include="..\Protos\*.proto" GrpcServices="Server" />
<Content Include="@(Protobuf)" LinkBase="" />
</ItemGroup>
유사 하 게 속성 설정GrpcServices
은 고객 프로젝트 에서 만 생 성 됩 니 다.Startup
Server
에서 우 리 는 일반적인 ASP.NET Core 프로그램 과 다르다 는 것 을 발견 했다.구체 적 인 것 은 다음 과 같다.Client
서비스 에 gRPC 서 비 스 를 도입 한 다음 에Startup
경로 에 가입 했다.gRPC 와 관련 된 nuget 패키지 세 개 를 도입 해 야 합 니 다.
ASP.NET Core 미들웨어 와 기능 공유 루트 파 이 프 는 서비스 다른 요청 처리 프로그램 으로 프로그램 을 설정 할 수 있 습 니 다.다른 요청 처리 프로그램(예 를 들 어 MVC 컨트롤 러)은 설 정 된 GRPC 서비스 경로 와 병행 할 수 있 습 니 다.
기타 설명 이 필요 한 내용
ASP.NET Core 인터페이스 와 의 통합
GRPC 서 비 스 는 주입(Di)과 로그 기능 에 의존 하 는 ASP.NETCore 기능 에 완전히 접근 할 수 있 습 니 다.예 를 들 어 서 비 스 는 구조 함수 로 DI 용기 의 기록 기 서 비 스 를 분석 할 수 있 습 니 다.
public class GreeterService : Greeter.GreeterBase
{
public GreeterService(ILogger<GreeterService> logger)
{
}
}
기본적으로 GRPC 서 비 스 는 임의의 생존 기간 을 가 진 다른 DI 서비스(Singleton,Scoped,or Transient)를 분석 할 수 있다.GRPC 방법 에서 HttpContext 분석
GRPC 응용 프로그램 인 터 페 이 스 는 method,host,header,and trailers 와 같은 일부 HTTP/2 메시지 데이터 에 대한 접근 을 제공 합 니 다.접근 은
ConfigureServices
매개 변수 로 GRPC 에 전달 하 는 방법 입 니 다.
public class GreeterService : Greeter.GreeterBase
{
public override Task<HelloReply>
SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
Configure
모든 ASP.NET 인터페이스ServerCallContext
에 대한 완전한 접근 을 제공 하지 않 습 니 다.ServerCallContext
확장 방법 은 ASP.NET API 의 바 텀 HTTP/2 메 시 지 를 나타 내 는 http Context 에 대한 완전한 접근 을 제공 합 니 다.
public class GreeterService : Greeter.GreeterBase
{
public override Task<HelloReply> SayHello(HelloRequest request,
ServerCallContext context)
{
var httpContext = context.GetHttpContext();
return Task.FromResult(new HelloReply
{
Message = "Using https: " + httpContext.Request.IsHttps
});
}
}
요청 체 데이터 속도 제한기본적으로 Kestrel 서버 는 최소 요청 주체 데이터 속도 로 설정 되 어 있 습 니 다.클 라 이언 트 흐름 식 과 이중 흐름 식 의 요청 에 대해 이 속 도 는 만족 하지 않 을 수 있 고 연결 이 시간 을 초과 할 수 있 습 니 다.GRPC 서비스 가 클 라 이언 트 흐름 과 이중 작업 흐름 호출 을 포함 할 때 최소 요청 본문 데이터 속도 제한 을 사용 하지 않 아야 합 니 다.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureKestrel((context, options) =>
{
options.Limits.MinRequestBodyDataRate = null;
});
});
}
참고 문장gRPC services with C#
Tutorial: Get started with gRPC in ASP.NET Core
gRPC services with ASP.NET Core
Migrating gRPC services from C-core to ASP.NET Core
총결산
오늘 공 유 된 내용 이 좀 많 습 니 다.가능 한 한 상세 하 게 기록 하고 가능 한 한 통속 적 이 고 알 기 쉬 운 언어 로 묘사 하여 사용 할 수 있 도록 하 는 것 이 목적 입 니 다.asp.net core 3.0 에서 grpc 서 비 스 를 1 등 시민 으로 지원 하기 때문에 알 아 볼 필요 가 있 습 니 다.많은 친구 들 이 궁금 해 할 것 같 습 니 다.제 웹 API 는 비 뚤 게 사용 하 는데 왜 gRPC 라 는 원 격 프로 세 스 로 프로 토 콜 을 호출 합 니까?이 문제 에 대하 여 저 는 따로 글 을 한 편 더 써 서 설명 하려 고 합 니 다.마지막 으로 여러분 의 읽 어 주 셔 서 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
.Net Core Excel 템플릿 읽기 Excel 파일 내보내기텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.