C # 클래스에서 .proto 파일을 생성하거나 'Code First gRPC'를 어떻게 사용합니까?


9

asp.net 핵심 웹 응용 프로그램에서 .NET 코어 3과 함께 gRPC를 사용하고 싶습니다. 기존 C # 클래스 및 모델 개체에서 필요한 .proto 파일을 어떻게 생성합니까? 기존 코드를 반영하는 .proto 파일을 다시 작성하고 싶지 않고 클래스 및 모델 객체에서 .proto 파일을 자동 생성하기를 원합니다.

이 메소드를 호출하여 서비스 클래스를 등록합니다.

builder.MapGrpcService<MyGrpcService>();

public class MyGrpcService
{
    public Task<string> ServiceMethod(ModelObject model, ServerCallContext context)
    {
        return Task.FromResult("It Worked");
    }
}

ModelObject[DataContract][DataMember]주문 속성.

이것이 가능한가? 온라인에서 보는 모든 예제는 .proto파일로 시작 합니다. MyGrpcService클래스 에서 원하는 서비스 메소드를 이미 정의했습니다 . 그러나 이것은 아마도 표준 작업 방식과 반대 일 것입니다 ...

이전의 .NET 원격과 같은 것은 원격 엔드 포인트에서 인터페이스를 요청할 수 있고 마술처럼 gRPC앞뒤로 통신 하는 데 이상적 일 수 있지만 이상적인 것은 아닙니다 .


내가 찾은 이 비디오는 gRPC 시작하기에 매우 유용합니다.
RobIII

1
그러나 gRPC에서 "일을하는 표준 방법"은 먼저 .proto 사양을 지정한 다음 코드 생성기를 사용하여 필요한 코드를 만드는 것입니다.
phuzi

비디오 링크 덕분에 .proto 파일과 gRPC의 작동 방식에 익숙해지기 위해 지난 며칠을 보냈습니다. 자동 툴링을 사용하기를 희망하는 많은 인터페이스와 모델 객체가 있습니다 ... 그러나 래퍼를 다시 작성하고 도구를 사용하여 .proto 파일을 생성하거나 수동으로 .proto 파일을 작성하지 못하는 경우는 없습니다.
jjxtra

C #에서 C #으로의 interop의 경우 protobuf-net.Grpc에서 AddCodeFirstGrpc를 사용하는 방법입니다. 그런 다음 클라이언트는 protobuf-net.Grpc를 사용하여 인터페이스, IP 및 포트만으로 Grpc 서비스에 액세스 할 수 있습니다. C # grpc 서비스를 호출하는 다른 언어의 interop이 필요한 경우 C # 코드에서 .proto를 생성 할 수 있습니다 ( stackoverflow.com/questions/1334659/… 참조) .
jjxtra

답변:


5

이를 위해 Marc Gravell을 사용할 수 있습니다 protobuf-net.Grpc. gRPC 서비스를 구축 할 때 코드 우선 경험이있는 것이 그가 작업을 시작한 정확한 사용 사례입니다. protobuf-netC # 유형과 프로토 타입 사이에 직렬화 기능을 이미 추가 한 것 위에 빌드됩니다 .

라이브러리를 사용하여 시작하는 방법을 확인하려면 설명서 를 확인하거나 Marc가 "gRPC 및 기타 트릭과 서비스 간 대화"에 대한 다음 기록 중 하나에서이 주제를 제시하는 것을보십시오.

실제로 9 월에 .NET Core 3.0의 릴리스 비트를 위해 업데이트 한 것 같습니다. 아마도 더 업데이트 된 버전 일 것입니다.

코드 를 설정할 때 어떻게 보이는지 보여주는 몇 가지 코드 샘플 도 있습니다 .


감사합니다. 시계를 갖기를 바랍니다. 대부분의 자동화 작업이 가능합니다
jjxtra

비디오 1 시간 2 분 마크는 그가 코드에 대해 먼저 이야기하기 시작하는 곳입니다
jjxtra

클라이언트 측 부분은 .NET 원격과 마찬가지로 완벽하게 보입니다. 여전히 서버를 설정하는 위치를 찾으려고합니다.)
jjxtra

그 문서를 확인하는 것이 가장 좋습니다. 이에 대한 단계별 설명이 있습니다 :)
poke

1
@jjxtra GitHub에서 "시작"과 대화의 모든 예가 있습니다
Marc Gravell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.