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 grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/3fbd4e41-390c-4dfe-9cc1-676ae95d9caan%40googlegroups.com.

Reply via email to