Reputation: 1
I have a solution built on .NET 6.0 and I want to use its functions from another solution restricted to .NET 4.7. I am getting an error when using GRPC on the client.
The first trial was on .NET 6.0 server and .NET 6.0 client on a windows 10 OS and it worked fine. Now the client is restricted to .NET 4.7 and the communication is not possible, I believe it is because .NET 4.7 does not support HTTP/2 while 6.0 supports it, so I need a work around to do the binding process Bind.
Code used in server side:
string gRPCNetworkIP = "127.0.0.1";
int gRPCNetworkPort = 50051;
//Creating gRPC service and Starting gRPC Network
Console.WriteLine("Creating gRPC service and Starting gRPC Network...");
var server = gRPCNetworkCongig(samsungGalaxyA50Driver, gRPCNetworkIP, gRPCNetworkPort);
Console.WriteLine("gRPC service and gRPC Network are created and started");
Console.ReadKey();
public static Server gRPCNetworkCongig(Driver driver, string gRPCIP, int gRPCPort)
{
Server server = new Server();
server.Ports.Add(new ServerPort(gRPCIP, gRPCPort, ServerCredentials.Insecure));
server.Services.Add(DriverService_gRPC.DriverService_gRPC.BindService(new DriverService(driver)));
// Start the gRPC server
server.Start();
return server;
}
Code used in client side:
static async Task Main(string[] args)
{
string gRPCNetworkIP = "127.0.0.1";
int gRPCNetworkPort = 50051;
string desiredDevice_1 = "CUO 4B2A";
string desiredDevice_2 = "BT-S2";
string desiredDevice_3 = "BLA";
string baseAddress = $"http://{gRPCNetworkIP}:{gRPCNetworkPort}";
var channel = GrpcChannel.ForAddress(baseAddress);
var client = new DriverService_gRPC.DriverService_gRPC.DriverService_gRPCClient(channel);
//await client.OpenSettingsAsync(new OpenSettingsRequest());
testcase_BT(client, desiredDevice_2);
Console.ReadKey();
}
public static async void testcase_BT(DriverService_gRPC.DriverService_gRPC.DriverService_gRPCClient driver, string desiredDevice)
{
Console.WriteLine("Openning Bluetooth Settings ...");
await driver.OpenBluetoothSettingsAsync(new OpenBluetoothSettingsRequest());
Console.WriteLine("Bluetooth Settings Openned");
Console.WriteLine($"Reading {desiredDevice} state ...");
var readStateResponse = await driver.ReadDeviceStateAsync(new ReadDeviceStateRequest { DesiredDevice = desiredDevice });
Console.WriteLine($"{desiredDevice} is {readStateResponse.State}");
Console.WriteLine("Testcase ended");
}
Now I have the same server and the same client but the only thing different is the client side is .NET 4.7 and now I am getting this error
System.InvalidOperationException: 'The channel configuration isn't valid on this operating system. The channel is configured to use WinHttpHandler and the current version of Windows doesn't support HTTP/2 features required by gRPC. Windows Server 2022 or Windows 11 or later is required. For more information, see https://aka.ms/aspnet/grpc/netframework.'
It doesnt make sense because the OS worked fine in the first trial so it should be the framework version.
Upvotes: 0
Views: 138