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
+
+
+
+
+
+
+
+
+
+
+