Home > Net >  From a GRPC Project, call a method on another GRPC project, in a different solution
From a GRPC Project, call a method on another GRPC project, in a different solution

Time:12-08

I'm using GRPC in C#, I already have a GRPC Project that uses its locals methods / proto classes, but don't know how to call a method that's in a different GRPC service that I referenced my adding the corresponding Nuget Package. Do I need to create that service proto method again? I'm not sure how to do this and I can't find examples about this.

For example This is one method in the proto file in that other service I need to use in my project:

/* Creates a new address under a given customer. */
rpc Create(CreateAddressRequest) returns (Address) {
    option (google.api.http) = {
        post: "/api/customers/{customer_id}/addresses/{type}"
        body: "address"
    };
}

And ths is the corresponding method in C# code (removed all the content)

[Authorize(Roles = V1.AuthorizationAttributes.Addresses.Create)]
public override async Task<Address> Create(CreateAddressRequest request, ServerCallContext context)
{
    Guard.AgainstNull(request);
    Guard.AgainstNonPositiveNumber(request.CustomerId);
    Guard.AgainstNull(request.Address);

    // more content here..

    return AddressSerializer.Serialize(address!);
}

So that's in a different service / solution that I reference by adding the nuget package to my GRPC project. What should I do to be able to call this method from my GRPc project?

CodePudding user response:

To call the method in the other GRPC service from your GRPC project, you will need to create a client for the service. In C#, you can do this by creating a new instance of a Grpc.Core.Channel and passing it to a new instance of the generated client class for the service.

Here's an example of how you might do this:

// Create a channel to the other service
var channel = new Grpc.Core.Channel("<host>:<port>", Grpc.Core.ChannelCredentials.Insecure);

// Create a client for the other service
var client = new OtherService.OtherServiceClient(channel);

// Call the Create method on the other service
var response = await client.CreateAsync(new CreateAddressRequest
{
    // Set the request parameters
});

You will need to replace and with the host and port of the server that is running the other GRPC service.

You will also need to make sure that the other service's protobuf definition file (the .proto file) is included in your project, so that the C# code for the service's client and request/response types can be generated. You can do this using the Protobuf NuGet package and the Protobuf tool, as described in the GRPC C# Quickstart.

  • Related