From 3a4a1f907e6a97f320405627493e0e664a9adcdd Mon Sep 17 00:00:00 2001 From: syneffort Date: Fri, 10 May 2024 17:28:21 +0900 Subject: [PATCH] gRPC sample --- DataTableRemoting/DataTableRemoting.sln | 16 ++++++++++++ DataTableRemoting/gRPCClient/Program.cs | 20 ++++++++++++++ .../gRPCClient/Protos/greet.proto | 21 +++++++++++++++ .../gRPCClient/gRPCClient.csproj | 21 +++++++++++++++ DataTableRemoting/gRPCService/Program.cs | 26 +++++++++++++++++++ .../Properties/launchSettings.json | 13 ++++++++++ .../gRPCService/Protos/greet.proto | 21 +++++++++++++++ .../gRPCService/Services/GreeterService.cs | 22 ++++++++++++++++ .../gRPCService/appsettings.Development.json | 8 ++++++ .../gRPCService/appsettings.json | 14 ++++++++++ .../gRPCService/gRPCService.csproj | 17 ++++++++++++ 11 files changed, 199 insertions(+) create mode 100644 DataTableRemoting/gRPCClient/Program.cs create mode 100644 DataTableRemoting/gRPCClient/Protos/greet.proto create mode 100644 DataTableRemoting/gRPCClient/gRPCClient.csproj create mode 100644 DataTableRemoting/gRPCService/Program.cs create mode 100644 DataTableRemoting/gRPCService/Properties/launchSettings.json create mode 100644 DataTableRemoting/gRPCService/Protos/greet.proto create mode 100644 DataTableRemoting/gRPCService/Services/GreeterService.cs create mode 100644 DataTableRemoting/gRPCService/appsettings.Development.json create mode 100644 DataTableRemoting/gRPCService/appsettings.json create mode 100644 DataTableRemoting/gRPCService/gRPCService.csproj diff --git a/DataTableRemoting/DataTableRemoting.sln b/DataTableRemoting/DataTableRemoting.sln index 922c059..7393cc6 100644 --- a/DataTableRemoting/DataTableRemoting.sln +++ b/DataTableRemoting/DataTableRemoting.sln @@ -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} diff --git a/DataTableRemoting/gRPCClient/Program.cs b/DataTableRemoting/gRPCClient/Program.cs new file mode 100644 index 0000000..6340554 --- /dev/null +++ b/DataTableRemoting/gRPCClient/Program.cs @@ -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(); + } + } +} diff --git a/DataTableRemoting/gRPCClient/Protos/greet.proto b/DataTableRemoting/gRPCClient/Protos/greet.proto new file mode 100644 index 0000000..a4564c6 --- /dev/null +++ b/DataTableRemoting/gRPCClient/Protos/greet.proto @@ -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; +} \ No newline at end of file diff --git a/DataTableRemoting/gRPCClient/gRPCClient.csproj b/DataTableRemoting/gRPCClient/gRPCClient.csproj new file mode 100644 index 0000000..37efd0f --- /dev/null +++ b/DataTableRemoting/gRPCClient/gRPCClient.csproj @@ -0,0 +1,21 @@ + + + + Exe + net6.0 + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + diff --git a/DataTableRemoting/gRPCService/Program.cs b/DataTableRemoting/gRPCService/Program.cs new file mode 100644 index 0000000..18dd77a --- /dev/null +++ b/DataTableRemoting/gRPCService/Program.cs @@ -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(); + 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(); + } + } +} \ No newline at end of file diff --git a/DataTableRemoting/gRPCService/Properties/launchSettings.json b/DataTableRemoting/gRPCService/Properties/launchSettings.json new file mode 100644 index 0000000..7009d54 --- /dev/null +++ b/DataTableRemoting/gRPCService/Properties/launchSettings.json @@ -0,0 +1,13 @@ +{ + "profiles": { + "gRPCService": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "http://localhost:5171;https://localhost:7044", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/DataTableRemoting/gRPCService/Protos/greet.proto b/DataTableRemoting/gRPCService/Protos/greet.proto new file mode 100644 index 0000000..679fa0c --- /dev/null +++ b/DataTableRemoting/gRPCService/Protos/greet.proto @@ -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; +} diff --git a/DataTableRemoting/gRPCService/Services/GreeterService.cs b/DataTableRemoting/gRPCService/Services/GreeterService.cs new file mode 100644 index 0000000..b42f69d --- /dev/null +++ b/DataTableRemoting/gRPCService/Services/GreeterService.cs @@ -0,0 +1,22 @@ +using Grpc.Core; +using gRPCService; + +namespace gRPCService.Services +{ + public class GreeterService : Greeter.GreeterBase + { + private readonly ILogger _logger; + public GreeterService(ILogger logger) + { + _logger = logger; + } + + public override Task SayHello(HelloRequest request, ServerCallContext context) + { + return Task.FromResult(new HelloReply + { + Message = "Hello " + request.Name + }); + } + } +} diff --git a/DataTableRemoting/gRPCService/appsettings.Development.json b/DataTableRemoting/gRPCService/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/DataTableRemoting/gRPCService/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/DataTableRemoting/gRPCService/appsettings.json b/DataTableRemoting/gRPCService/appsettings.json new file mode 100644 index 0000000..1aef507 --- /dev/null +++ b/DataTableRemoting/gRPCService/appsettings.json @@ -0,0 +1,14 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "Kestrel": { + "EndpointDefaults": { + "Protocols": "Http2" + } + } +} diff --git a/DataTableRemoting/gRPCService/gRPCService.csproj b/DataTableRemoting/gRPCService/gRPCService.csproj new file mode 100644 index 0000000..ce368b7 --- /dev/null +++ b/DataTableRemoting/gRPCService/gRPCService.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + enable + enable + + + + + + + + + + +