Why does Xamarin Android fails to send GRPC/Http2 requests?

Solution 1:

I make it work your provided solution. Sorry i didnt cover exact details why your way didnt worked and this one worked. Also i couldn't test iOs version.

Server. I changed only port version. I used release version. Btw I am not sure how successfully you could run Http1AndHttp2 and same ip and port. I had issues on personal project.

Mobile Added Grpc.Core and Grpc.Core.Api nugets to both projects.

I am creating channel differently. Your solution version

var channel = GrpcChannel.ForAddress("123.123.123.123:123456");

My version changed to

var channel = new Channel("123.123.123.123:123456", ChannelCredentials.Insecure);

This is not very secure version but could work for some time since http2 is already binary. Create and use secure way you need to sign certificate and use it in server and client. Good example is here

Also i recommend to reuse channels since it is expensive to create new. Http2 is good at keeping multiple clients on one stream. You could recreate clients which is cheap operation.


A little update from MS https://docs.microsoft.com/en-us/aspnet/core/grpc/client?view=aspnetcore-3.1

Calling gRPC over HTTP/2 with Grpc.Net.Client is currently not supported on Xamarin. We are working to improve HTTP/2 support in a future Xamarin release. Grpc.Core and gRPC-Web are viable alternatives that work today.