gRPC sample

main
syneffort 12 months ago
parent b4e9717685
commit 3a4a1f907e
  1. 16
      DataTableRemoting/DataTableRemoting.sln
  2. 20
      DataTableRemoting/gRPCClient/Program.cs
  3. 21
      DataTableRemoting/gRPCClient/Protos/greet.proto
  4. 21
      DataTableRemoting/gRPCClient/gRPCClient.csproj
  5. 26
      DataTableRemoting/gRPCService/Program.cs
  6. 13
      DataTableRemoting/gRPCService/Properties/launchSettings.json
  7. 21
      DataTableRemoting/gRPCService/Protos/greet.proto
  8. 22
      DataTableRemoting/gRPCService/Services/GreeterService.cs
  9. 8
      DataTableRemoting/gRPCService/appsettings.Development.json
  10. 14
      DataTableRemoting/gRPCService/appsettings.json
  11. 17
      DataTableRemoting/gRPCService/gRPCService.csproj

@ -15,6 +15,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebService", "WebService",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataTableAPIHost", "DataTableAPIHost\DataTableAPIHost.csproj", "{8598A97E-811F-405C-BCEE-3E9077D503F6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gRPC", "gRPC", "{79C50041-CBE2-4B6B-AAEC-6A6F31169067}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gRPCService", "gRPCService\gRPCService.csproj", "{30C0BD14-64AC-46A5-90C1-F14A19D0C5E7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gRPCClient", "gRPCClient\gRPCClient.csproj", "{235B20A3-7AA0-4538-B8E3-1736E73ABF21}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -37,6 +43,14 @@ Global
{8598A97E-811F-405C-BCEE-3E9077D503F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8598A97E-811F-405C-BCEE-3E9077D503F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8598A97E-811F-405C-BCEE-3E9077D503F6}.Release|Any CPU.Build.0 = Release|Any CPU
{30C0BD14-64AC-46A5-90C1-F14A19D0C5E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{30C0BD14-64AC-46A5-90C1-F14A19D0C5E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{30C0BD14-64AC-46A5-90C1-F14A19D0C5E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{30C0BD14-64AC-46A5-90C1-F14A19D0C5E7}.Release|Any CPU.Build.0 = Release|Any CPU
{235B20A3-7AA0-4538-B8E3-1736E73ABF21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{235B20A3-7AA0-4538-B8E3-1736E73ABF21}.Debug|Any CPU.Build.0 = Debug|Any CPU
{235B20A3-7AA0-4538-B8E3-1736E73ABF21}.Release|Any CPU.ActiveCfg = Release|Any CPU
{235B20A3-7AA0-4538-B8E3-1736E73ABF21}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -46,6 +60,8 @@ Global
{6E02E64B-D7C0-4593-8CCF-75D680AEB188} = {35D8B24C-91B6-47F4-AEBC-1FEF7FCF2866}
{2BC29718-BCFE-4069-881A-595AC1688F8A} = {35D8B24C-91B6-47F4-AEBC-1FEF7FCF2866}
{8598A97E-811F-405C-BCEE-3E9077D503F6} = {4F8C407D-03AF-4010-A10D-3228D7810EF5}
{30C0BD14-64AC-46A5-90C1-F14A19D0C5E7} = {79C50041-CBE2-4B6B-AAEC-6A6F31169067}
{235B20A3-7AA0-4538-B8E3-1736E73ABF21} = {79C50041-CBE2-4B6B-AAEC-6A6F31169067}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {659C8570-938B-451A-8E1F-087AA1B1F50D}

@ -0,0 +1,20 @@
using Grpc.Net.Client;
using GrpcGreeterClient;
namespace gRPCClient
{
internal class Program
{
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}

@ -0,0 +1,21 @@
syntax = "proto3";
option csharp_namespace = "GrpcGreeterClient";
package greet;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply);
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings.
message HelloReply {
string message = 1;
}

@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.26.1" />
<PackageReference Include="Grpc.Net.Client" Version="2.62.0" />
<PackageReference Include="Grpc.Tools" Version="2.63.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
</ItemGroup>
</Project>

@ -0,0 +1,26 @@
using gRPCService.Services;
namespace gRPCService
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Additional configuration is required to successfully run gRPC on macOS.
// For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682
// Add services to the container.
builder.Services.AddGrpc();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.MapGrpcService<GreeterService>();
app.MapGet("/", () => "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
app.Run();
}
}
}

@ -0,0 +1,13 @@
{
"profiles": {
"gRPCService": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "http://localhost:5171;https://localhost:7044",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

@ -0,0 +1,21 @@
syntax = "proto3";
option csharp_namespace = "gRPCService";
package greet;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply);
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings.
message HelloReply {
string message = 1;
}

@ -0,0 +1,22 @@
using Grpc.Core;
using gRPCService;
namespace gRPCService.Services
{
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)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
}

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

@ -0,0 +1,14 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
}
}
}

@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Grpc.AspNetCore" Version="2.40.0" />
</ItemGroup>
</Project>
Loading…
Cancel
Save