Иногда звонки GRPC просто зависают - PullRequest
0 голосов
/ 24 января 2019

У меня есть простой сервис grpc, написанный на C #. Я использую его в своем приложении, и в целом все работает нормально, но иногда сервисный вызов просто зависает и все. Клиент отправляет запрос, но обработчик сервера даже не вызывается. Звонок просто зависает ...

Вот код серверной стороны:

public class Program
{
    static Server Server;
    const int Port = 50055;

    static void Main(string[] args)
    {
        StartEnviewServer();

        while (Console.ReadKey().Key != ConsoleKey.Q) { }

        StopEnviewServer();
    }

    static void StartEnviewServer()
    {
        SimpleGrpcService.SimpleGrpcServiceBase Service = new TestService();
        Server = new Server()
        {
            Services = { SimpleGrpcService.BindService(Service) },
            Ports = { new ServerPort("127.0.0.1", Port, ServerCredentials.Insecure),
                      new ServerPort("192.168.121.59", Port, ServerCredentials.Insecure),
                      new ServerPort("172.24.200.1", Port, ServerCredentials.Insecure)
            }
        };
        Server.Start();
    }

    static void StopEnviewServer()
    {
        Server.ShutdownAsync();
    }

}

class TestService : SimpleGrpcService.SimpleGrpcServiceBase
{
    public override Task<SimpleString> TestCall(SimpleString request, ServerCallContext context)
    {
        Console.WriteLine(request.Value);
        return Task.FromResult(new SimpleString());
    }
}

Вот код на стороне клиента:

static void Main(string[] args)
    {
        var z = "localhost:50055";
        TestServiceClient Service = new TestServiceClient(z);
        Service.TestCall(new SimpleString());
        Console.Read();
    }

Все сделано в соответствии с рекомендациями пользователя, и все работает в один момент, но внезапно останавливается через некоторое время. Недавно я нашел обходное решение. Когда я обновляю библиотеки grpc - Grpc.Core, Google.Protobuff и System.Interactive.Async до более старой версии и обратно, он снова начинает работать. Но это не решение для меня. Я хочу знать, как решить эту проблему раз и навсегда ...

...