Seif Elkady
Seif Elkady

Reputation: 1

I am trying to use gRPC between .NET 6.0 as a service and .NET 4.7 as Client side. I am getting an error on the Client side it doesnt support HTTP2

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

Answers (0)

Related Questions