G_WindowsRequest is declared in package "windows.requesthandler.service",
but in orchestrator.proto (which itself is under package "test"), you're
only referring to it as "G_WindowsRequest", without specifying the package
name. The protobuf compiler has no way of knowing which "G_WindowsRequest"
you want (FWIW there could be 50 other definitions of that name under
different packages).
I think you need to use the fully qualified name
windows.requesthandler.service.G_WindowsRequest, since G_WindowsRequest is
from a different namespace than you're currently in. That should fix the
issue you're seeing.
On Wednesday, May 5, 2021 at 5:34:04 PM UTC+2 John Buczkowski wrote:
> I'm building out a series of ProtoBuf definitions for a .NetCore gRPC
> application.
> I'm using the Orchestrator pattern as I will be creating a series of
> microservices.
>
> I am running into issues with my proto definitions throwing compiler
> errors as being "undefined."
> The definitions are in several different files (with different C#
> namespaces).
> What follows is a simplified version of my definitions.
>
> Consider the following protobuf files:
>
> **service.proto**
>
> syntax = "proto3";
> option csharp_namespace = "RequestHandlerService";
> package test;
>
> service Handler
> {
> rpc AddItem1(G_RequestType1) returns (G_RequestResponse) { }
> rpc AddItem2(G_RequestType2) returns (G_RequestResponse) { }
> }
>
> message G_RequestType1{
> string originId = 1;
> string request = 2;
> }
>
> message G_RequestType2{
> string originId = 1;
> string request = 2;
> }
>
> message G_RequestResponse{
> string response = 1;
> }
>
>
> **windowsservice.proto:**
>
> syntax = "proto3";
> import "google/protobuf/timestamp.proto";
> option csharp_namespace = "Windows.RequestHandler.Service";
> package windows.requesthandler.service;
>
> service WindowsHandler
> {
> rpc Action1(G_Action1Request) returns (G_Action1Response) { }
> rpc Action2(G_Action2Request) returns (G_Action2Reponse) { }
> }
>
> message G_Action1Request{
> string transactionId = 1;
> google.protobuf.Timestamp DateTimeStamp = 2;
> string filePath = 3;
> }
>
> message G_Action2Request{
> string transactionId = 1;
> google.protobuf.Timestamp DateTimeStamp = 2;
> string textToInsert = 3;
> }
>
> message G_Action1Response {
> google.protobuf.Timestamp DateTimeStamp = 1;
> string fileSecurityStatusMessage = 2;
> G_Action1Request action1Request = 3;
> }
>
> message G_Action2Response {
> google.protobuf.Timestamp DateTimeStamp = 1;
> string fileModifierStatusMessage = 2;
> G_Action2Request action2Request = 3;
> }
>
>
> message G_WindowsRequest {
> int32 requestId = 1;
> oneof RequestType{
> G_Action1Request action1Request = 2;
> G_Action2Request action2Requestion = 3;
> }
> }
>
> message G_WindowsRequestResponse {
> bool wasSuccessful = 1;
> string response = 2;
> oneof ResponseType{
> G_Action1Response action1Response = 3;
> G_Action2Response action2Respone = 4;
> }
> }
>
>
> **orchestrator.proto**
>
> syntax = "proto3";
> option csharp_namespace = "OrchestratorService";
> package test;
>
> import "service.proto";
> import "windowsservice.proto";
>
> service Orchestrator
> {
> rpc RegisterClient(G_RegisterClientRequest) returns (stream
> G_Response) { }
> rpc EnqueueRequest(G_OrchestrationRequest) returns (G_Response) { }
> }
>
> message G_OrchestrationRequest{
> string originId = 1;
> oneof RequestType{
> G_RequestType1 requestType1 = 2;
> G_RequestType2 requestType2 = 3;
> G_Response response = 4;
> G_WindowsRequest windowsRequest = 5;
> G_WindowsRequestResponse windowsRequestResponse = 6;
> }
> }
>
> message G_RegisterClientRequest{
> string clientId = 1;
> }
>
> message G_Response{
> bool wasSuccessful = 1;
> string response = 2;
> }
>
> Here is the <ItemGroup> definition from the csproj file for my
> Orchestrator project:
>
> <ItemGroup>
> <Protobuf Include="../Protos/orchestrator.proto"
> GrpcServices="Server" ProtoRoot="../Protos/">
> <Link>Protos/orchestrator.proto</Link>
> </Protobuf>
> <Protobuf Include="../Protos/service.proto" GrpcServices="Client"
> ProtoRoot="../Protos/">
> <Link>Protos/service.proto</Link>
> </Protobuf>
> <Protobuf Include="../Protos/windowsservice.proto"
> GrpcServices="Client" ProtoRoot="../Protos/">
> <Link>Protos/windowservice.proto</Link>
> </Protobuf>
> </ItemGroup>
>
> Both **G_WindowsRequest** and **G_WindowsRequestResponse** are throwing a
> compiler error saying they are undefined. Is this an issue with
> **csharp_namespace** and/or **package** resolution?
>
> Is there a way to enforce separate package/csharp_namespace definitions
> within the separate proto definitions, but reference those definitions
> within the rolled up "orchestrator" proto file definition?
>
>
> **Here is a snippet of the compiler errors I am seeing:**
>
> > 2> orchestrator.proto(22,5): error : "G_WindowsRequest" is not
> > defined. 2> orchestrator.proto(23,5): error :
> > "G_WindowsRequestResponse" is not defined. 2>Done building target
> > "_Protobuf_CoreCompile" in project "Protos.csproj" -- FAILED. 2>
> > 2>Done building project "Protos.csproj" -- FAILED. 2> 2>Build FAILED.
> > 2> 2>orchestrator.proto(22,5): error : "G_WindowsRequest" is not
> > defined. 2>orchestrator.proto(23,5): error :
> > "G_WindowsRequestResponse" is not defined. 2> 0 Warning(s) 2> 2
> > Error(s)
>
--
You received this message because you are subscribed to the Google Groups
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/grpc-io/20bdf7d6-1776-41ca-90a5-53e2b986956dn%40googlegroups.com.