aspnetcore/grpc/index.md
:::moniker range=">= aspnetcore-6.0"
gRPC is a language agnostic, high-performance Remote Procedure Call (RPC) framework.
The main benefits of gRPC are:
These benefits make gRPC ideal for:
.proto filesgRPC uses a contract-first approach to API development. Services and messages are defined in .proto files:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
.NET types for services, clients, and messages are automatically generated by including .proto files in a project:
.proto files to the <Protobuf> item group.<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
For more information on gRPC tooling support, see xref:grpc/basics.
gRPC services can be hosted on ASP.NET Core. Services have full integration with ASP.NET Core features such as logging, dependency injection (DI), authentication, and authorization.
gRPC requires the Grpc.AspNetCore package. For information on configuring gRPC in a .NET app, see Configure gRPC.
The ASP.NET Core gRPC Service project template provides a starter service:
:::moniker-end
:::moniker range=">= aspnetcore-10.0"
public class GreeterService(ILogger<GreeterService> logger) : Greeter.GreeterBase
{
public override Task<HelloReply> SayHello(HelloRequest request,
ServerCallContext context)
{
logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
:::moniker-end
:::moniker range=">= aspnetcore-6.0 < aspnetcore-10.0"
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}
public override Task<HelloReply> SayHello(HelloRequest request,
ServerCallContext context)
{
_logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
:::moniker-end
:::moniker range=">= aspnetcore-6.0"
GreeterService inherits from the GreeterBase type, which is generated from the Greeter service in the .proto file. The service is made accessible to clients in Program.cs:
app.MapGrpcService<GreeterService>();
To learn more about gRPC services on ASP.NET Core, see xref:grpc/aspnetcore.
gRPC clients are concrete client types that are generated from .proto files. The concrete gRPC client has methods that translate to the gRPC service in the .proto file.
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(
new HelloRequest { Name = "World" });
Console.WriteLine(response.Message);
A gRPC client is created using a channel, which represents a long-lived connection to a gRPC service. A channel can be created using GrpcChannel.ForAddress.
For more information on creating clients, and calling different service methods, see xref:grpc/client.
:::moniker-end
:::moniker range=">= aspnetcore-3.0 < aspnetcore-6.0"
gRPC is a language agnostic, high-performance Remote Procedure Call (RPC) framework.
The main benefits of gRPC are:
These benefits make gRPC ideal for:
.proto filesgRPC uses a contract-first approach to API development. Services and messages are defined in .proto files:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
.NET types for services, clients, and messages are automatically generated by including .proto files in a project:
.proto files to the <Protobuf> item group.<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
For more information on gRPC tooling support, see xref:grpc/basics.
gRPC services can be hosted on ASP.NET Core. Services have full integration with ASP.NET Core features such as logging, dependency injection (DI), authentication, and authorization.
gRPC requires the Grpc.AspNetCore package. For information on configuring gRPC in a .NET app, see Configure gRPC.
The gRPC service project template provides a starter service:
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}
public override Task<HelloReply> SayHello(HelloRequest request,
ServerCallContext context)
{
_logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
GreeterService inherits from the GreeterBase type, which is generated from the Greeter service in the .proto file. The service is made accessible to clients in Startup.cs:
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
});
To learn more about gRPC services on ASP.NET Core, see xref:grpc/aspnetcore.
gRPC clients are concrete client types that are generated from .proto files. The concrete gRPC client has methods that translate to the gRPC service in the .proto file.
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(
new HelloRequest { Name = "World" });
Console.WriteLine(response.Message);
A gRPC client is created using a channel, which represents a long-lived connection to a gRPC service. A channel can be created using GrpcChannel.ForAddress.
For more information on creating clients, and calling different service methods, see xref:grpc/client.
:::moniker-end